Swiftpack.co - Mcrich23/Mcrich23-Toolkit as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by Mcrich23.
Mcrich23/Mcrich23-Toolkit v0.9.1
A toolkit for all the qualities of life I love
⭐️ 1
🕓 13 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/Mcrich23/Mcrich23-Toolkit.git", from: "v0.9.1")

Mcrich23 Toolkit

This is a package that I made that has a bunch of qualities of life.

Requirements

  • iOS 14, macOS 10.16, tvOS 14, or watchOS 6.7
  • Swift 5.5+
  • Xcode 12.5+

Installation

The preferred way of installing Mcrich23 Toolkit is via the Swift Package Manager.

  1. In Xcode, open your project and navigate to FileAdd Packages...
  2. Paste the repository URL (https://github.com/Mcrich23/Mcrich23-Toolkit) and click Next.
  3. For Rules, select Up To Next Minor Version (With base version set to 0.6.1).
  4. Click Finish.
  5. Check Mcrich23-Toolkit
  6. Click Add To Project

SwiftUI Functions

CapsuleMultiFilter

Description:

A nice multiple filter UI

Image:

CapsuleMultiFilter Image

Example:

CapsuleMultiFilter(menuContent: .constant({ // Passes in the view for the plus button menu. Must use .constant() so that the view updates.
        VStack {
            ForEach(viewModel.filterOpt, id: \.self) { text in
                if !viewModel.filter.contains(text) {
                    Button {
                        viewModel.filter.append(text)
                    } label: {
                        Text(text)
                    }
                }
            }
        }}),
    opt: $viewModel.filterOpt, //Use an array that are the same options as in the menu
    selected: $viewModel.filter //An array of currently selected filters
)

OnboardingScreen

Description:

A screen for welcoming the user or presenting a What's New screen.

Image:

OnboardingScreen Image (Individual) OnboardingScreen Image (Steps)

Example:

Individual:
OnboardingScreen(
    titleIcon: .systemImage(named: "plus"), // An icon to go next to the title
    titleIconColor: .yellow, // Color for the icon next to the title
    title: "Hello World", // Title
    subtitle: "Lorem Ipsum", // Subtitle (leave blank for it to dissapear)
    cells: .individual([
        FeatureCell(
            image: .systemImage(named: "hand"), // An icon next to the cell
            imageColor: .red, // Color for the icon next to the cell
            title: "Title", // Title
            subtitle: "Subtitle" // Subtitle/Description (leave blank for it to dissapear)
        )
    ])
)
Steps:
let steps = [ Text(NSLocalizedString("welcome title 1", comment: "")).font(.body),
              Text(NSLocalizedString("welcome title 2", comment: "")).font(.body),
              Text(NSLocalizedString("welcome title 3", comment: "")).font(.body),
              Text(NSLocalizedString("welcome title 4", comment: "")).font(.body)]

let indicationTypes = [
    StepperIndicationType
        .custom(CircledIconView(image: Image(systemName: "plus"), width: 50)),
        .custom(CircledIconView(image: Image(systemName: "hand.draw"), width: 50)),
        .custom(CircledIconView(image: Image(systemName: "hand.tap"), width: 50)),
        .custom(CircledIconView(image: Image(systemName: "eye"), width: 50))
]
...

OnboardingScreen<Content>(
   titleIcon: .systemImage(named: "plus"), // An icon to go next to the title
   titleIconColor: .yellow, // Color for the icon next to the title
   title: "Hello World", // Title
   subtitle: "Lorem Ipsum", // Subtitle (leave blank for it to dissapear)
   cells:
       .steps(
           StepperViewOnboarding(
               steps: steps, // All the steps for the onboarding
               indicationTypes: indicationTypes, // What goes next to the step text
               lineOptions: .custom(1, Colors.blue(.teal).rawValue) // All the different line options
           )
       )
)

See badrinathvm/StepperView for more info on the Steps function.

SwiftUIAlert

Description:

Default alerts for SwiftUI

Examples:

show
SwiftUIAlert.show(title: "Hello Word!", //Alert Title
                    message: "Lorem Ipsum", //Alert Message
                    preferredStyle: .alert, //Style (alert or action sheet)
                    actions: [UIAlertAction(title: "Done", //Action Title
                                            style: .default, //Action Style (default, destructive, dismiss)
                                            handler: {_ in}) //Handler for choosing that action
                    ]
)
textfieldShow
SwiftUIAlert.textfieldShow(title: "Test", //Alert Title
                            message: "Hello World!", //Alert Message
                            preferredStyle: .alert, //Style (alert or action sheet)
                            textfield: AlertTextfield(text: $text, //Textfield Text
                                                        placeholder: "", //Textfield Placeholder
                                                        clearButtonMode: .whileEditing, //When to show clear butt(always, whileEditing, unlessEditing, or never)
                                                        enablesReturnKeyAutomatically: true, //Show return key keyboard
                                                        disableAutocorrection: false, //Disable Autocorrection?
                                                        autocapitalization: .sentences, //Autocapitalization (nonsentances, allCharacter, or words)
                                                        keyboardType: .default, //The type of keyboard
                                                        returnKeyType: .default, //Type of return key on keyboard
                                                        isSecureTextEntry: .no, //Is Secure Textfield? (.yes(UITextInputPassordRules) or .no)
                                                        dismissKeyboardOnReturn: true), //Dismiss keyboard on return?
                            actions: [UIAlertAction(title: "Done", style: .default)]
)

NetworkMonitor

Description:

Watch connection to the internet and use information to modify app behavior.

Usage:

Start Monitoring: NetworkMonitor.shared.startMonitoring() (Call in AppDelagate)

Stop Monitoring: NetworkMonitor.shared.stopMonitoring()

Get Connection Type: NetworkMonitor.shared.connectionType (Unknown can mean disconnected)

CardView

Description:

Similar to the cards in the App Store.

Image:

CardViewOpenCard

Example:

CardView(
    showHeader: .yes( // Wheather header should be visible
        headerTitle: "Title", // Title on the header
        headerSubtitle: "Subtitle", // Subtitle on the header
        headerSubtitleLocation: .below // If Subtitle is above or below the Title
    ),
    cards: $cards, // All the cards in the view
    showCreateButton: .yes( // Wheather create button should be visible
        create: { // Action when create (Plus Button) is tapped
            showCreateTicket.toggle()
        }
    ),
    maxWidth: 428, // The maximum width for cards
    selectedCards: { // Action called on selection of a card
        print("Selected Card")
    },
    deselectedCards: { // Action called on deselection of a card
        print("Deselected Card")
    }
)

ShareSheet

Description:

System ShareSheet for SwiftUI.

Image:

ShareSheet

Example:

Mcrich23_Toolkit.presentShareSheet(
    activityItems: ["Hello World"], // Items to share
    excludedActivityTypes: [] // Applications to exclude from share sheet
)

.onRotate

Description:

Update a variable and your view on rotate.

Example:

@State var orientation = UIDevice.current.orientation
...
var body: some view {
    VStack {
        if orientation == .portrait {
            Text("Hello World")
        }
    }
    .onRotate { newOrientation in
        orientation = newOrientation
    }
}

getTopVC

Description:

Get the top view controller to do a uikit function on the current view instead of the root view

Example:

Mcrich23-Toolkit.getTopVC { vc in
    vc.present(view, animated: true)
}

topVC

Description:

Get the top view controller to do a uikit function on the current view instead of the root view

Example:

Mcrich23_Toolkit.topVC.present {
    EmptyView()
}

UIKit Functions

InteracteractiveLinkLabel

Description

Easily hyperlink your UILabel with this component of the Mcrich23-Toolkit

Example:

let label: InteractiveLinkLabel = {
    let label = InteractiveLinkLabel()
    
    let firstChunk = NSMutableAttributedString(string: "Hello, my name is Morris, you cancheck out my website", attributes: nil) // Just text
    let website = NSMutableAttributedString(string: "here",attributes:[NSAttributedString.Key.link: URL(string: "https://mcrich23.com")!]) //Hyperlinked word
    
    //Put it together
    let fullAttributtedText = NSMutableAttributedString()
    fullAttributtedText.append(firstChunk)
    fullAttributtedText.append(tos)
    
    label.attributedText = fullAttributtedText
    label.numberOfLines = 0
    label.sizeToFit()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.isUserInteractionEnabled = true
    label.customUrlHandler = { url in // Open url in a custom way, Note: you may need todeclare in viewDidLoad
        let safari = SFSafariViewController(url: url)
        self.present(safari, animated: true)
    }
    
    return label
}()

InteracteractiveLinkTextView

Description

Easily hyperlink your UITextView with this component of the Mcrich23-Toolkit

Example:

let textView: InteractiveLinkLabel = {
    let textView = InteractiveLinkLabel()
    
    let firstChunk = NSMutableAttributedString(string: "Hello, my name is Morris, you cancheck out my website", attributes: nil) // Just text
    let website = NSMutableAttributedString(string: "here",attributes:[NSAttributedString.Key.link: URL(string: "https://mcrich23.com")!]) //Hyperlinked word
    
    //Put it together
    let fullAttributtedText = NSMutableAttributedString()
    fullAttributtedText.append(firstChunk)
    fullAttributtedText.append(tos)
    
    // Modifiers
    textView.attributedText = fullAttributtedText
    textView.numberOfLines = 0
    textView.sizeToFit()
    textView.translatesAutoresizingMaskIntoConstraints = false
    textView.isUserInteractionEnabled = true
    textView.customUrlHandler = { url in // Open url in a custom way, Note: you may need todeclare in viewDidLoad
        let safari = SFSafariViewController(url: url)
        self.present(safari, animated: true)
    }
    
    return label
}()

GitHub

link
Stars: 1
Last commit: 5 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

0.9.1
13 weeks ago
  • Updated documentation (see Readme.md)
  • Changed CapsuleMultiFilter menuContent to more easily be entered

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics