A nice multiple filter UI that horizontally scrolls
Image:
Example:
ScrollCapsuleMultiFilter(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
)
AdaptiveCapsuleMultiFilter
Type:
SwiftUI View
Description:
A nice multiple filter UI that auto resizes
Image:
Example:
AdaptiveCapsuleMultiFilter(
"Filter: ", // The label you want next to the capsule filters
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
Type:
SwiftUI View
Description:
A screen for welcoming the user or presenting a What’s New screen.
Image:
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
)
)
)
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)]
)
contextMenu
Type:
SwiftUI View Modifier
Description:
Uses UIKit elements to broaden the capabilities of context menus.
Example
Expand
PreviewContextMenu(
navigate: .expand, // Expands view
destination: ContentView2(), // View to preview
menu: {
let openView = UIAction(title: "Open", image: UIImage(systemName: "arrow.right")) { _ in // Item for menu
showView.toggle()
}
return UIMenu(
title: "", // Menu Title
children: [ // Menu Items
openView
]
)
}
)
Custom
.contextMenu(PreviewContextMenu(
navigate: .custom({ // Dismisses view and lets you run custom function
showView.toggle()
}),
destination: ContentView2(), // View to preview
menu: {
let openView = UIAction(title: "Open", image: UIImage(systemName: "arrow.right")) { _ in // Item for menu
showView.toggle()
}
return UIMenu(
title: "", // Menu Title
children: [ // Menu Items
openView
]
)
}
)
)
CardView
Type:
SwiftUI View
Description:
Similar to the cards in the App Store.
Image:
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
Type:
ShareSheet
Description:
System ShareSheet for SwiftUI.
Image:
Example:
Mcrich23_Toolkit.presentShareSheet(
activityItems: ["Hello World"], // Items to share
excludedActivityTypes: [] // Applications to exclude from share sheet
)
onRotate
Type:
SwiftUI View Modifier
Description:
Run code whenever the device rotates.
Example:
@State var orientation = UIDevice.current.orientation
var body: some view {
VStack {
if orientation == .portrait {
Text("Hello World")
}
}
.onRotate { newOrientation in
orientation = newOrientation // Updates the orientation variable
}
}
getTopVC
Type:
Function
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
Type:
UIViewController
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()
}
onWillDissapear
Type:
SwiftUI View Modifier
Description:
Run code when the view will dissapear, but before it actually dissapears.
Example:
var body: some View {
Text("This view has dissapeared\(viewModel.dissapearCount)times!")
.onWillDissapear {
viewModel.dissapearCount += 1
}
}
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
Type:
UITextView
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
}()
Other
GlyphImage
Type:
Enum
Description:
Different types of glyphs, whether it be icons, or images. one variable for all the types.
Convert it to an image with ConvertedGlyphImage
Cases
GlyphImage.systemImage(named: "x.circle") // Uses SF Symbols
GlyphImage.systemImage(named: "person1") // Uses Assets.xcassets
GlyphImage.remoteImage(url: self.url) // Fetches from url and displays image
GlyphImage.defaultIcon // The default icon that you specify
NetworkMonitor
Type:
Class
Description:
Watch connection to the internet and use information to modify app behavior.
Note: You must call startMonitoring in order for NetworkMonitor to start working.
Usage:
Start Monitoring: NetworkMonitor.shared.startMonitoring() (Call in AppDelagate)
Mcrich23 Toolkit
This is a package that I made that has a bunch of qualities of life.
Requirements
Installation
The preferred way of installing Mcrich23 Toolkit is via the Swift Package Manager.
https://github.com/Mcrich23/Mcrich23-Toolkit
) and click Next.Table Of Contents
Requirements
Installation
SwiftUI Functions
ScrollCapsuleMultiFilter
AdaptiveCapsuleMultiFilter
OnboardingScreen
SwiftUIAlert
show
textfieldShow
contextMenu
CardView
ShareSheet
onRotate
getTopVC
topVC
onWillDissapear
ConvertedGlyphImage
openUrl
UIKit Functions
InteracteractiveLinkLabel
InteracteractiveLinkTextView
Other
GlyphImage
NetworkMonitor
SwiftUI Functions
ScrollCapsuleMultiFilter
Type:
SwiftUI View
Description:
A nice multiple filter UI that horizontally scrolls
Image:
Example:
AdaptiveCapsuleMultiFilter
Type:
SwiftUI View
Description:
A nice multiple filter UI that auto resizes
Image:
Example:
OnboardingScreen
Type:
SwiftUI View
Description:
A screen for welcoming the user or presenting a What’s New screen.
Image:
Example:
Individual:
Steps:
See badrinathvm/StepperView for more info on the Steps function.
SwiftUIAlert
Type:
Alert
Description:
Default alerts for SwiftUI
Examples:
show
textfieldShow
contextMenu
Type:
SwiftUI View Modifier
Description:
Uses UIKit elements to broaden the capabilities of context menus.
Example
Expand
Custom
CardView
Type:
SwiftUI View
Description:
Similar to the cards in the App Store.
Image:
Example:
ShareSheet
Type:
ShareSheet
Description:
System ShareSheet for SwiftUI.
Image:
Example:
onRotate
Type:
SwiftUI View Modifier
Description:
Run code whenever the device rotates.
Example:
getTopVC
Type:
Function
Description:
Get the top view controller to do a uikit function on the current view instead of the root view
Example:
topVC
Type:
UIViewController
Description:
Get the top view controller to do a uikit function on the current view instead of the root view
Example:
onWillDissapear
Type:
SwiftUI View Modifier
Description:
Run code when the view will dissapear, but before it actually dissapears.
Example:
ConvertedGlyphImage
Type:
SwiftUI Image
Description:
Converts GlyphImage into a SwiftUI Image
Example:
openUrl
Type:
Function
Description
Opens a url
Example
UIKit Functions
InteracteractiveLinkLabel
Type:
UILabel
Description
Easily hyperlink your UILabel with this component of the Mcrich23-Toolkit
Example:
InteracteractiveLinkTextView
Type:
UITextView
Description
Easily hyperlink your UITextView with this component of the Mcrich23-Toolkit
Example:
Other
GlyphImage
Type:
Enum
Description:
Different types of glyphs, whether it be icons, or images. one variable for all the types.
Convert it to an image with
ConvertedGlyphImage
Cases
NetworkMonitor
Type:
Class
Description:
Watch connection to the internet and use information to modify app behavior.
Note: You must call startMonitoring in order for NetworkMonitor to start working.
Usage:
Start Monitoring:
NetworkMonitor.shared.startMonitoring()
(Call in AppDelagate)Stop Monitoring:
NetworkMonitor.shared.stopMonitoring()
Get Connection Type:
NetworkMonitor.shared.connectionType
(Unknown can mean disconnected)