General-purpose contextual cards for iOS

Overview

BulletinBoard

Version License Platform Documentation Contact: @_alexaubry

BulletinBoard is an iOS library that generates and manages contextual cards displayed at the bottom of the screen. It is especially well suited for quick user interactions such as onboarding screens or configuration.

It has an interface similar to the cards displayed by iOS for AirPods, Apple TV/HomePod configuration and NFC tag scanning. It supports both the iPhone, iPhone X and the iPad.

It has built-in support for accessibility features such as VoiceOver and Switch Control.

Here are some screenshots showing what you can build with BulletinBoard:

Demo Screenshots

Requirements

  • Xcode 11 and later
  • iOS 9 and later
  • Swift 5.1 and later (also works with Objective-C).

Demo

A demo project is included in the BulletinBoard workspace. It demonstrates how to:

  • integrate the library (setup, data flow)
  • create standard page cards
  • create custom page subclasses to add features
  • create custom cards from scratch

Two demo targets are available:

  • BB-Swift (demo written in Swift)
  • BB-ObjC (demo written in Objective-C)

Build and run the scheme for your favorite language to open the demo app.

Installation

Swift Package Manager

To install BulletinBoard using the Swift Package Manager, add this dependency to your Package.swift file:

.package(url: "https://github.com/alexaubry/BulletinBoard.git", from: "5.0.0")

CocoaPods

To install BulletinBoard using CocoaPods, add this line to your Podfile:

pod 'BulletinBoard'

Carthage

To install BulletinBoard using Carthage, add this line to your Cartfile:

github "alexaubry/BulletinBoard"

Documentation

  • The full library documentation is available here.
  • To learn how to start using BulletinBoard, check out our Getting Started guide.

Contributing

Thank you for your interest in the project! Contributions are welcome and appreciated.

Make sure to read these guides before getting started:

Author

Written by Alexis Aubry. You can find me on Twitter.

License

BulletinBoard is available under the MIT license. See the LICENSE file for more info.

Comments
  • Customizing the stock PageBulletinItem

    Customizing the stock PageBulletinItem

    For my app, I wanted to customize the stock PageBulletinItem class with additional views so that we have a consistent look and feel between stock and modified Pages. Unfortunately, some parts of PageBulletinItem are public instead of open and can't be overridden, and the stack view of buttons is not available outside of makeArrangedSubviews().

    Do you have any interest in exposing additional customization, and/or would you accept a PR for such a feature? I think it could be done cleanly with either additional function variables (like actionHandler), optional protocol funcs, or override-able funcs in PageBulletinItem. These customization points would be called inside PageBulletinItem.makeArrangedSubviews(). Example: open func viewsAboveTitle(_ interfaceBuilder: BulletinInterfaceBuilder) -> [UIView] and so on for the "space" before and after each element: | title | image | description | buttons |

    Here's an example I made with a local copy of PageBulletinItem. screen shot 2017-11-30 at 4 12 43 pm

    class TextFieldPageBulletinItem: CustomizedPageBulletinItem {
        
        fileprivate var errorLabel: UILabel?
        fileprivate var textField: UITextField?
        public var textInputHandler: ((_ text: String) -> Void)?
        
        override func makeArrangedSubviews() -> [UIView] {
            var arrangedSubviews = super.makeArrangedSubviews()
            
            let interfaceBuilder = InterfaceBuilderType.init(appearance: appearance)
            errorLabel = interfaceBuilder.makeDescriptionLabel()
            errorLabel!.text = ""
            errorLabel!.textColor = .red
            
            textField = UITextField()
            textField!.delegate = self
            textField!.borderStyle = .roundedRect
            textField!.returnKeyType = .done
            
            // find the optional stack view of buttons and insert above it
            var buttonStack: UIStackView?
            for view in arrangedSubviews {
                if let bs = view as? UIStackView {
                    buttonStack = bs
                    break
                }
            }
            if let buttonStack = buttonStack, let idx = arrangedSubviews.index(of: buttonStack) {
                // insert in reverse order
                arrangedSubviews.insert(textField!, at: idx)
                arrangedSubviews.insert(errorLabel!, at: idx)
            } else {
                // insert in correct order
                arrangedSubviews.append(errorLabel!)
                arrangedSubviews.append(textField!)
            }
            
            // since there isn't a method similar to "viewDidAppear" for BulletinItems,
            // we're using a workaround open the keyboard after a certain amount of time has elapsed
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
                self?.textField?.becomeFirstResponder()
            }
            return arrangedSubviews
        }
    }
    
    extension TextFieldPageBulletinItem: UITextFieldDelegate {
        func isInputValid(text: String?) -> Bool {
            if text != nil && !text!.isEmpty {
                 return true
            }
             return false
        }
        
        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            if let text = textField.text, isInputValid(text: text) {
                textField.resignFirstResponder()
                textInputHandler?(text)
                return true
            } else {
                errorLabel?.text = "You must enter some text to continue."
                textField.backgroundColor = .red
                return false
            }
        }
    }
    
    feature next-release implemented 
    opened by eliburke 13
  • Version 5.0

    Version 5.0

    In this version, we add support for the Swift Package Manager. To make these changes possible, we decided to make the following breaking changes:

    • Require iOS 11
    • Remove the possibility to create items in Objective-C

    We are planning to release this version on October 25, 2020. During the next month, please reply to this PR with feedback about any bugs or request.

    To use the release candidate version, please use the following tag in your package manager: 5.0.0-rc.2

    opened by alexisakers 10
  • Update for Xcode 10

    Update for Xcode 10

    Hi i want to use this library inside my Xcode project but i can't do this because i'm using swit 4.2 and the master branch (installed with pod) use the 4.1 version. The library will be updated ?

    good first issue tooling 
    opened by Gianlo98 8
  • IOS 13 Dark Mode

    IOS 13 Dark Mode

    Hi, thank you for your great BulletinBoard. Unfortunately, this is broken in IOS 13 in Darkmode, since e.g. the date picker is no longer visible, because the background of the bulletin board is not set by .systemBackground (white on white) Can you look at this please? Maybe you can set the backgrounds via .systemBackground and the font by .label. Thank you and best regards

    opened by DK-Web 7
  • How to check whether BLTNItemManager is displaying?

    How to check whether BLTNItemManager is displaying?

    I can't see a way to tell if the bulletin manager is already displaying an item. This would be super useful in my app if it could be implemented, if not already. Thanks!

    opened by yusuftor 7
  • CloseGlyph - Unexpectedly found nil while unwrapping an Optional value

    CloseGlyph - Unexpectedly found nil while unwrapping an Optional value

    New Issue Checklist

    Issue Description

    Hi 👋, I just installed BulletinBoard 2.0.0 and I get a crash when I'm running my build. I get Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value in BulletinCloseButton.swift, line 50: let glyph = UIImage(named: "CloseGlyph", in: Bundle(for: BulletinCloseButton.self), compatibleWith: nil)!.

    It looks like the CloseGlyph image is missing or something. I tried to set requiresCloseButton to false in my BLTNPageItem but it didn't change anything...

    I looked into the BulletinBoard pod folder in my project and could find the CloseGlyph image. I can share some code if you need too.

    Thanks!

    Environment

    • BulletinBoard Version: 2.0.0
    • iOS Version: 11.3
    • Device(s): iPhone 7, iPhone X simulator
    opened by victor-sarda 7
  • Corner radius and matches iPhone X

    Corner radius and matches iPhone X

    Checklist

    • [x] I've tested my changes.
    • [x] I've read the Contribution Guidelines.
    • [x] I've updated the documentation if necessary.

    Motivation and Context

    More customization for more controls and who doesn't love customization, right?

    Description

    1. Changed font sizes properties from let to var, making them alterable so users can define font size on their own
    2. Added actionButtonCornerRadius and alternativeButtonCornerRadius for appearance in page items, cardCornerRadius for the bulletin card corner radius. (All default to 12)

    Example use:

    /// Card corner radius
    bulletinManager.cardCornerRadius = 20
    bulletinManager.prepare()
    bulletinManager.presentBulletin(above: self)
    
    /// Action button corner radius, make it rounder
    page.appearance.actionButtonCornerRadius = 18
    
    1. Make bulletin cards rounder and match more like when AirPods card shows up for iPhone X. (Default corner radius of 34, I know it's a lot but it does look good with the rounded edges on iPhone X)

    Screenshots: This is what AirPods pairing looks like in iPhone X: img_0194

    If user does not define cardCornerRadius before calling prepare on manager: img_0195 img_0196

    opened by CaliCastle 7
  • Swipe to dimiss not triggering dismissalHandler

    Swipe to dimiss not triggering dismissalHandler

    When swiping to dismiss a PageBulletinItem, it dismisses correctly but does not trigger the dismissalHandler. The dismissalHandler works fine with tap to dismiss.

    New Issue Checklist

    Issue Description

    After setting up a simple PageBulletinItem providing a title, descriptiontext, actionbuttontitle, alternativebuttontitle, setting isDismissable to TRUE as well as supplying an actionHandler and dismissalHandler. When presenting this item, tapping to dismiss triggers the dismissalHandler where as swiping does not.

    simple_bulletinmanager_with_item

    Environment

    • iOS Version: iOS 11.0.3
    • Device(s): iPhone 6s
    bug 
    opened by SoaringEarth 7
  • Fix for iPad split view bug

    Fix for iPad split view bug

    Checklist

    • [x] I've tested my changes.
    • [x] I've read the Contribution Guidelines.
    • [x] I've updated the documentation if necessary.

    Motivation and Context

    This fixes the issue #172 Changes were tested with the example application provided.

    Description

    Fix was done by setting the correct frame in the BulletinPresentationAnimationController when animating the view in. Also fixed couple activity indicator style deprecation warnings.

    opened by Piidro 6
  • UI Freezes after swiping bulletin and tapping close button

    UI Freezes after swiping bulletin and tapping close button

    Problem Description: Tapping on the close button after swiping upwards on the bulletin causes the UI to freeze. I believe this is an issue with the interactive pan gesture and the dismissBulletin method called by the close button.

    Steps to reproduce:

    1. Display a bulletin with requiresCloseButton = true.
    2. Pan the bulletin controller upwards using the gesture. This is tricky but you basically need to pan while holding your finger down. Don't release the gesture.
    3. Before releasing the window use your other finger to tap on the close button as many times as needed.
    4. Release the finger being used to pan the controller.

    Result The bulletin UI will freeze completely. The close button, actions, gesture, background view, and all subviews in the bulletin controller will no longer handle touches.

    Expected Result The bulletin should be dismissed.

    Notes We've had some users come across this while swiping downwards over the area where the close button is. I think this is the same issue but I could not reproduce it reliably.

    Environment:

    • Device: iPhone XR
    • OS: iOS 12.0
    • Version of BulletinBoard: 2.0.2
    opened by bsweett 6
  • Upgrade framework and example to Swift 4.2

    Upgrade framework and example to Swift 4.2

    Checklist

    • [x] I've tested my changes.
    • [x] I've read the Contribution Guidelines.
    • [x] I've updated the documentation if necessary.

    Motivation and Context

    Issue #97.

    Description

    Upgrade the Swift version of the framework and sample project from Swift 3 to Swift 4.2.

    opened by a2 6
  • Wrong title will be used after set alternativeButtonTitle

    Wrong title will be used after set alternativeButtonTitle

    There is a bug when changing the alternativeButtonTitle: after setting the property the alternativeButton always receives the actionButtonTitle.

    See BLTNActionItem.swift#L57:

    • wrong: .setTitle(actionButtonTitle, for: .normal)
    • fixed: .setTitle(alternativeButtonTitle, for: .normal)
    opened by BigDada1 0
  • Could not find module 'BLTNBoard' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator, at: .../Build/Products/Debug-iphonesimulator/BLTNBoard.swiftmodule

    Could not find module 'BLTNBoard' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator, at: .../Build/Products/Debug-iphonesimulator/BLTNBoard.swiftmodule

    Problem Description: BLTNBoard not building on simulator with M1 Mac

    Steps to reproduce: On M1 Mac try to build project importing BLTNBoard via SPM

    Environment:

    • Device: Simulator
    • Version of BulletinBoard: 5.0.0
    opened by neobeppe 1
  • Documentation & Youtube Video Links Broken.

    Documentation & Youtube Video Links Broken.

    Links to YouTube video, documentation, etc are all broken.

    Sad to see such a great repository with so many stars not be maintained properly /: was really looking forward to using this and I cannot imagine how many people don't want to use after the documentation isn't even properly available/maintained.

    opened by cvcoder1 1
  • Adjust tableView height when keyboard appears

    Adjust tableView height when keyboard appears

    Hi! I created a page containing a searchBar and a tableView. When the keyboard appears, the page goes up and the top comes out of the screen. I have tried several things, but I am unable to reduce the size of the tableView so that the search bar stays visible.

    Here is my code, simplified, to use and try as is:

    import UIKit
    import BLTNBoard
    
    class HistoricPage: FeedbackPageBLTNItem {
    	
    	fileprivate var tableView: UITableView?
    	fileprivate var searchBar: UISearchBar?
    	
    	fileprivate var numberOfItems: Int = 20
    	
    	override func tearDown() {
    		super.tearDown()
    		tableView?.dataSource = nil
    		tableView?.delegate = nil
    		searchBar?.delegate = nil
    	}
    	
    	override func makeViewsUnderTitle(with interfaceBuilder: BLTNInterfaceBuilder) -> [UIView]? {
    		let stack = interfaceBuilder.makeGroupStack(spacing: 0)
    		stack.alignment = .fill
    		stack.distribution = .fill
    		
    		let searchBar = UISearchBar(frame: .zero)
    		searchBar.searchBarStyle = .minimal
    		let searchBarWrapper = interfaceBuilder.wrapView(searchBar, width: nil, height: nil, position: .pinnedToEdges)
    		self.searchBar = searchBar
    		
    		let tableView = UITableView(frame: .zero, style: .plain)
    		tableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellIdentifier")
    		tableView.rowHeight = 38
    		let tableWrapper = interfaceBuilder.wrapView(tableView, width: nil, height: NSNumber(value: numberOfItems * Int(tableView.rowHeight)), position: .pinnedToEdges)
    		self.tableView = tableView
    		
    		tableView.dataSource = self
    		tableView.delegate = self
    		searchBar.delegate = self
    		
    		stack.addArrangedSubview(searchBarWrapper)
    		stack.addArrangedSubview(tableWrapper)
    		return [stack]
    	}
    }
    
    extension HistoricPage: UITableViewDataSource, UITableViewDelegate {
    	
    	func numberOfSections(in tableView: UITableView) -> Int {
    		return 1
    	}
    	
    	func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    		return numberOfItems
    	}
    	
    	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    		let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath)
    		cell.textLabel?.text = String(indexPath.row+1)
    		return cell
    	}
    	
    	func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    		self.searchBar?.resignFirstResponder()
    	}
    }
    
    extension HistoricPage: UISearchBarDelegate {
    	
    	func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
    		// Something to do here to resize tableView/tableWrapper?
    	}
    	
    	func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    		if let text = searchBar.text, let numberOfItems = Int(text) {
    			tableView?.setContentOffset(.zero, animated: true) // scroll to top
    			self.numberOfItems = numberOfItems
    			self.tableView?.reloadData()
    			// Something to do here to resize tableView/tableWrapper according to number of items?
    		}
    	}
    }
    

    Simulator Screen Shot - iPod touch (7th generation) - 2021-04-13 at 21 35 20 Simulator Screen Shot - iPod touch (7th generation) - 2021-04-13 at 21 35 30

    Thanks for the help anyone can give me 🙏

    opened by link60 2
  • Finish issue #128

    Finish issue #128

    Checklist

    • [x] I've tested my changes.
    • [x] I've read the Contribution Guidelines.
    • [x] I've updated the documentation if necessary.

    Motivation and Context

    This is a Pull Request to fix issue #128. Someone requested that you could change the alignments of the title text, description text as well as the image.

    This PR solves that problem.

    I tested on Xcode's 12.4 simulators of iPhone 8 and iPhone 12

    Description

    To change the alignment of title when instantiating a page FeedbackPageBLTNItem() set the page's .titleAlignment to be whatever you want (.left, .right, ect). If a user does not specify then the default alignment is center.

    Similarly, to change the alignment of description use the .descriptionAlignment to set to desirable alignment And also to change the alignment of image use the .imageContentMode to set to desirable alignment

    opened by caocmai 1
Releases(4.1.1)
  • 4.1.1(May 14, 2020)

  • 4.1.0(Oct 4, 2019)

  • 3.0.0(Dec 17, 2018)

    ⚠ You will need Xcode 10 to use BulletinBoard 3.0.

    New Features

    • Add isShowingBulletin property (thanks @kennyDang)
    • Add willDisplay method to BLTNItem (thanks @kizitonwose)
    • Add option to show the bulletin above the whole application (thanks @alexeichhorn)

    Fixes

    • Upgrade to Swift 4.2 (thanks @a2)
    • Fix frozen dismissal after initial interaction (thanks @a2)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Sep 17, 2018)

    • Fix setters and retain semantics
    • Add workaround to allow static library usage
    • Fix Swift version in Podspec for compatibility with Xcode 10

    Note: Carthage binaries won't be supplied anymore, for security and convenience reasons; as we can't provide reliable support for past and upcoming versions of Xcode in that file.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(May 28, 2018)

  • 2.0.0(May 28, 2018)

    This is the second major release of the BulletinBoard framework! Thanks to every contributor for their bug reports, feature requests and help implementing the new features.

    đŸ“Ļ Updating

    CocoaPods

    In your Podfile, change the line where your declare BulletinBoard as a dependency:

    pod "BulletinBoard", "~> 2.0"
    

    And run pod update.

    Carthage

    In your Cartfile, change the line where your declare BulletinBoard as a dependency:

    github "alexaubry/BulletinBoard" ~> 2.0
    

    And run carthage update.

    ⚠ī¸ Breaking Changes

    This version contains major source breaking changes. If you need help, please refer to the migration guide, or open an issue.

    📝 Release Notes

    New Features

    • Make page items more open to customization: if you create custom pages, you no longer need to recreate the standard components yourself
    • Customize fonts and more colors
    • Customize status bar colors
    • Customize bulletin background color
    • Customize corner radius
    • Customize padding between screen and bulletin
    • Hide the activity indicator without changing the current item
    • Annotate library to support Objective-C apps
    • Handle keyboard frame updates (support for text fields)
    • Support for tinting images with template rendering mode
    • Allow customization of the background view
    • Add text field as a standard control
    • Show activity indicator immediately after item is presented
    • Callback for configuration and presentation from BulletinItem

    User-Facing Changes

    • On iPad, the bulletin will be presented at the center of the screen and can only be dismissed by a tap (no swipe)
    • The item will not be dismissed on swipe unless the user lifts their finger from the screen
    • Use screen corner radius on iPhone X

    Bug fixes

    • Fix dismiss tap background gesture being called for touches inside the content view
    • Fix width contraint not being respected for regular layouts
    • Fix iTunes Connect rejection bug due to LLVM code coverage
    • Fix action button not being hidden when changing the item
    • Fix dismissal handler not being called
    • Fix controls inside the card not receiving touchesEnded events
    • Fix cropped bulletin when presenting above split view controller
    • Correctly reset non-dismissable cards position when swipe ends
    • Fix Auto Layout conflicts during transitions
    • Fix crash when reusing bulletin manager

    Library

    • Split BulletinInterfaceFactory in two more open classes: BLTNAppearance for appearance customization, andBLTNInterfaceBuilde for interface components creation
    • CreateBLTNActionItem as a root bulletin item for items with buttons. Handles button creation and tap events. Views above and below buttons are customizable
    • Add example of a collection view bulletin item
    • Remove HighlightButton from public API
    • Various gardening operations to make comments and code more clear
    Source code(tar.gz)
    Source code(zip)
    BLTNBoard.framework.zip(3.44 MB)
  • 1.3.0(Oct 18, 2017)

    ⚠ī¸ Source-breaking changes

    - You can no longer pass a completion block on dismissal

    To execute some code when the item is dismissed, set the dismissalHandler property when creating the item.

    Old

    manager.dismissBulletin(animated: true) {
        print("Bulletin dismissed")
    }
    

    New

    let item: BulletinItem = ...
    
    item.dismissalHandler = { item in
        print("Bulletin dismissed")
    }
    
    manager.dismissBulletin(animated: true) // calls the dismissalHandler
    

    ✨ New Features

    • Customize the background blur

    🐛 Fixes

    • Better iPhone X support
    • Auto Layout improvements

    đŸ“Ļ Updating

    • If you are using CocoaPods : pod update
    • If you are using Carthage : carthage update

    ℹī¸ Info

    • SHA-256 checksum : 95e3057f8d39731da134c5dac05f8aaece0c253f8967c28b4b3a495a993a733a
    Source code(tar.gz)
    Source code(zip)
    BulletinBoard.framework.zip(2.97 MB)
  • 1.2.0(Oct 6, 2017)

    ✨ New Features

    • Dismiss the bulletin by swiping down

    🐛 Fixes

    • Support Swift 3.2

    đŸ“Ļ Updating

    • If you are using CocoaPods : pod update
    • If you are using Carthage : carthage update

    ℹī¸ Info

    • SHA-256 checksum : 57b2b614daae9161a63c784ea4025777ec82d994ed4483440a3cbc37c11c8148
    Source code(tar.gz)
    Source code(zip)
    BulletinBoard.framework.zip(2.56 MB)
  • 1.1.0(Oct 5, 2017)

    ✨ New Features

    • Add Accessibility technologies support (VoiceOver, Switch Control) - thanks @lennet!
    • Add an optional activity indicator before transitions

    🐛 Fixes

    • Improve memory management and fix retain cycles/leaks

    đŸ“Ļ Updating

    • If you are using CocoaPods : pod update
    • If you are using Carthage : carthage update

    ℹī¸ Info

    • SHA-256 checksum : 2149ce8f0580ead3650bcdbea96bb176eddffec6b880e5613bdebbe245b40193
    Source code(tar.gz)
    Source code(zip)
    BulletinBoard.framework.zip(2.54 MB)
  • 1.0.0(Oct 1, 2017)

Owner
Alexis (Aubry) Akers
Alexis (Aubry) Akers
SwiftEntryKit is a presentation library for iOS. It can be used to easily display overlays within your iOS apps.

SwiftEntryKit ?? Donations can be made here. Table of Contents Overview Features Example Project Example Project Installation Presets Playground Requi

Daniel Huri 6.1k Jan 4, 2023
An iOS library for SwiftUI to create draggable sheet experiences similar to iOS applications like Maps and Stocks.

An iOS library for SwiftUI to create draggable sheet experiences similar to iOS applications like Maps and Stocks.

Wouter 63 Jan 5, 2023
A colored alert view for your iOS.

æ—ĨæœŦčĒž KRAlertController KRAlertController is a beautiful and easy-to-use alert controller for your iOS written by Swift. Requirements iOS 10.0+ Xcode 10

K.R.Impedance 52 Jun 30, 2022
🍞 Loaf is a Swifty Framework for Easy iOS Toasts

Loaf ?? Inspired by Android's Toast, Loaf is a Swifty Framework for Easy iOS Toasts Usage From any view controller, a Loaf can be presented by calling

Mat Schmid 995 Dec 28, 2022
The easiest way to display highly customizable in app notification banners in iOS

Written in Swift 5 NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banne

Dalton Hinterscher 4.5k Jan 9, 2023
A simple, customizable popup dialog for iOS written in Swift. Replaces UIAlertController alert style.

Introduction Popup Dialog is a simple, customizable popup dialog written in Swift. Features Easy to use API with hardly any boilerplate code Convenien

Orderella Ltd. 3.8k Dec 20, 2022
Display Apple system-like self-hiding status alerts. It is well suited for notifying user without interrupting user flow in iOS-like way.

StatusAlert is being sponsored by the following tool; please help to support us by takin a look and signing up to a free trial. Dependency managers Fe

Yehor Miroshnychenko 841 Dec 6, 2022
Live animated Alert View for iOS written in Swift

Sweet Alert iOS Beautiful Animated custom Alert View inspired from javascript library SweetAlert. Written in Swift this SweetAlertView can be used in

Sahil 2k Dec 22, 2022
SwiftMessages is a very flexible view and view controller presentation library for iOS.

SwiftMessages Overview SwiftMessages is a very flexible view and view controller presentation library for iOS. Message views and view controllers can

SwiftKick Mobile 6.7k Jan 2, 2023
A Swift Toast view - iOS 14 style and newer - built with UIKit. 🍞

Toast-Swift A Swift Toast view - iOS 14 style - built with UIKit. ?? Installation Swift Package Manager You can use The Swift Package Manager to insta

Bastiaan Jansen 216 Jan 4, 2023
A Swift package for iOS/tvOS for easy alert presentation

AlertPresenter Listed on the Swift Package Index and originally posted on my blog. It can be fiddly to handle the presentation of alerts on a specific

Chris Mash 14 Jul 1, 2022
iOS tweak to display toasts for Low Power alerts and charging

Electrode iOS tweak to display toasts for Low Power alerts and charging. Localization Want to help translate Electrode to your language? Sumbit a pull

null 8 Sep 7, 2022
A customizable, full-feature, lightweight iOS framework to be used instead of UIAlertController.

A customizable, full-feature, lightweight iOS framework to be used instead of UIAlertController.

Ali Samaiee 11 Jun 6, 2022
💌 Easy to use and customizable messages/notifications for iOS à la Tweetbot

Notice: TSMessages is no longer being maintained/updated. We recommend everyone migrate to RMessage. This repository will be kept as is for those who

Felix Krause 4.9k Dec 31, 2022
A modern iOS toast view that can fit your notification needs

CRToast CRToast is a library that allows you to easily create notifications that appear on top of or by pushing out the status bar or navigation bar.

Collin Ruffenach 4.2k Dec 30, 2022
[iOS] Easy, customizable notifications displayed on top of the statusbar. With progress and activity. iPhone X ready.

JDStatusBarNotification Show messages on top of the status bar. Customizable colors, font and animation. Supports progress display and can show an act

M Emrich 3.8k Dec 27, 2022
iOS / Objective C: an extremely simple UIAlertView alternative

RKDropdownAlert an extremely simple (and customizeable) alert alternative based on Facebook's app Slingshot, and inspiration from SVProgressHUD (yes,

Richard Kim 1.5k Nov 20, 2022
This is an iOS control for selecting a date using UIDatePicker in an UIAlertController like manner

RMDateSelectionViewController This framework allows you to select a date by presenting an action sheet. In addition, it allows you to add actions arro

Roland Moers 1.2k Dec 13, 2022
A lightweight dropdown notification for iOS 7+, in Swift.

BRYXBanner A lightweight dropdown banner for iOS 7+. Usage Import BRYXBanner import BRYXBanner Create a banner using the designated initializer. let b

Bryx, Inc 1k Nov 20, 2022