• Stars
    star
    875
  • Rank 52,146 (Top 2 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 9 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A message bar for iOS written in Swift.

Dodo, a message bar for iOS / Swift

Carthage compatible CocoaPods Version Swift Package Manager compatible License Platform

Dodo, a message bar for iOS

This is a UI widget for showing text messages in iOS apps. It is useful for showing short messages to the user, something like: "Message sent", "Note saved", "No Internet connection".

  • Dodo includes styles for success, info, warning and error type messages.
  • The bar can have buttons with custom tap handlers.
  • Bar styles can be customized.
  • You can provide custom animations for showing and hiding the bar or use one of the default animation presets.
  • Supports iOS 9+.

Illustration fromAlice's Adventures in Wonderland by John Tenniel

At last the Dodo said, `EVERYBODY has won, and all must have prizes.'

From Alice's Adventures in Wonderland. Original illustration by John Tenniel, 1865. Source: Wikimedia Commons.

Setup

There are multiple ways you can add Dodo to your project.

Add source

Simply add DodoDistrib.swift file into your Xcode project.

Setup with Carthage

Add github "evgenyneu/Dodo" ~> 13.0 to your Cartfile and run carthage update.

Setup with CocoaPods

If you are using CocoaPods add this text to your Podfile and run pod install.

use_frameworks!
target 'Your target name'
pod 'Dodo', '~> 13.0'

Setup with Swift Package Manager

Legacy Swift versions

Setup a previous version of the library if you use an older version of Swift.

Usage

Add import Dodo to your source code (unless you used the file setup method).

Dodo is an extension of UIView class. You can reach it by using using the dodo property in any instance of UIView or its subclass. It can be, for example, the view property of your view controller.

Show and hide message bar

view.dodo.success("Everybody has won and all must have prizes.")
view.dodo.info("Extinction is the rule. Survival is the exception.")
view.dodo.warning("This world is but a canvas to our imagination.")
view.dodo.error("The perception of beauty is a moral test.")

view.dodo.hide()

If you are showing the bar in the root view you may need to provide top or bottom anchors. This will prevent the message bar from overlapping with the status or the tab bar.

view.dodo.topAnchor = view.safeAreaLayoutGuide.topAnchor
view.dodo.bottomAnchor = view.safeAreaLayoutGuide.bottomAnchor
view.dodo.success("I solemnly swear to avoid the notch.")

Alternatively, you can specify the anchors from the layout guides:

view.dodo.topAnchor = topLayoutGuide.bottomAnchor
view.dodo.bottomAnchor = bottomLayoutGuide.topAnchor
view.dodo.success("I solemnly swear to avoid the notch.")

Dodo success presets

Dodo info presets

Dodo warning presets

Dodo error presets

Styling

Set dodo.style property to style the message bar before it is shown. See the styling manual for the complete list of configuration options.

// Set the text color
view.dodo.style.label.color = UIColor.white

// Set background color
view.dodo.style.bar.backgroundColor = DodoColor.fromHexString("#00000090")

// Close the bar after 3 seconds
view.dodo.style.bar.hideAfterDelaySeconds = 3

// Close the bar when it is tapped
view.dodo.style.bar.hideOnTap = true

// Show the bar at the bottom of the screen
view.dodo.style.bar.locationTop = false

// Do something on tap
view.dodo.style.bar.onTap = { /* Tapped on the bar */ }

Add buttons or icons

Set style.leftButton and style.rightButton properties to show buttons or icons. As with other style properties please style the buttons before the message is shown.

// Use a built-in icon
view.dodo.style.leftButton.icon = .close

// Supply your image
view.dodo.style.leftButton.image = UIImage(named: "CloseIcon")

// Change button's image color
view.dodo.style.leftButton.tintColor = DodoColor.fromHexString("#FFFFFF90")

// Do something on tap
view.dodo.style.leftButton.onTap = { /* Button tapped */ }

// Close the bar when the button is tapped
view.dodo.style.leftButton.hideOnTap = true

Dodo bar with left buttons

Dodo bar with right and left buttons

Customize animation

Configure the animation effect of the bar before it is shown. See the animation wiki page for more information.

// Use existing animations
view.dodo.style.bar.animationShow = DodoAnimations.rotate.show
view.dodo.style.bar.animationHide = DodoAnimations.slideRight.hide

// Turn off animation
view.dodo.style.bar.animationShow = DodoAnimations.noAnimation.show

Unit testing

Sometimes it is useful to verify which messages were shown by your app in unit tests. It can be done by setting an instance of DodoMock class to view.dodo property.

See the unit testing manual for more details.

Known limitations

Using Dodo from Objective-C

This manual describes how to show Dodo messages in Objective-C apps.

Demo iOS app

This project includes a demo app.

Dodo message bar demo iOS app

Thanks 👍

Quotes credits

Albert Einstein

Information is not knowledge.

Carl Sagan

Extinction is the rule. Survival is the exception.

George S. Patton

Success is how high you bounce when you hit bottom.

Henry David Thoreau

This world is but a canvas to our imagination.

The perception of beauty is a moral test.

Joe Namath

When you win, nothing hurts.

Lewis Carroll

Everybody has won and all must have prizes.

Malcolm Forbes

Failure is success if we learn from it.

William Blake

If the doors of perception were cleansed everything would appear to man as it is, Infinite.

Alternative solutions

Here are some other message bar libraries for iOS:

License

Dodo is released under the MIT License.

•ᴥ•

This project is dedicated to the dodo, species of flightless birds that lived on the island of Mauritius and became extinct in the 17th century.

More Repositories

1

keychain-swift

Helper functions for saving text in Keychain securely for iOS, OS X, tvOS and watchOS.
Swift
2,577
star
2

Cosmos

A star rating control for iOS/tvOS written in Swift
Swift
2,119
star
3

SigmaSwiftStatistics

A collection of functions for statistical calculation written in Swift.
Swift
682
star
4

js-evaluator-for-android

A library for running JavaScript in Android apps.
JavaScript
476
star
5

swift-badge

A badge view for iOS/tvOS written in Swift
Swift
390
star
6

moa

An image download extension of the image view written in Swift for iOS, tvOS and macOS.
Swift
333
star
7

Auk

An image slideshow for iOS written in Swift.
Swift
277
star
8

center-vfl

Centering a view in a super view with Visual Format Language using Auto Layout in iOS/Swift
Swift
227
star
9

ios-imagescroll-swift

iOS demo of using image view inside a scroll view with auto layout in Swift
Swift
128
star
10

UnderKeyboard

An iOS libary for moving content from under the keyboard.
Swift
128
star
11

SpringAnimationCALayer

A helper function for animating CALayer with spring effect in Swift
Swift
117
star
12

Cephalopod

A sound fader for AVAudioPlayer written in Swift for iOS, tvOS and macOS.
Swift
112
star
13

bubble-button-animation-ios-swift

Demo iOS app showing button animation
Swift
66
star
14

bounce-button-animation-android

A demo Android app that shows how to animate a button with spring/bounce effect.
Java
61
star
15

ios-imagescroll

iOS: example of using image view inside a scroll view with auto layout, written in Obective-C.
Objective-C
59
star
16

angular-markdown-preview

AngularJS module for markdown textarea with live HTML preview.
JavaScript
35
star
17

ios-javascriptcore-demo

iOS demo: running javascript function from ObjectiveC using JavaScriptCore framework
Objective-C
32
star
18

Glyptodon

A 'no content' message overlay for iOS written in Swift.
Swift
31
star
19

Scrollable

An iOS control that makes content scroll vertically.
Swift
20
star
20

aes-crypto-web

Web app for encrypting text messages http://aescrypto.com
JavaScript
20
star
21

JsonSwiftson

A JSON parser with concise API written in Swift.
Swift
14
star
22

aes-crypto-android

Android app for encrypting text messages http://aescrypto.com
JavaScript
12
star
23

two_galaxies

A web simulation of two interacting galaxies
JavaScript
10
star
24

walk-to-circle-ios

An iOS app for those who like walking
Swift
9
star
25

trigonometric_identities_latex

Trigonometric identities in LaTeX format
TeX
8
star
26

greeter-android

Sample code for "Testing activity in Android Studio" tutorial.
Java
6
star
27

aes-text-encryption-ios

iOS app for encrypting text messages http://aescrypto.com
JavaScript
5
star
28

sharing-keychain-demo

A demo iOS app showing how to access a shared keychain item
Swift
4
star
29

ios-core-location-battery-meter

iOS demo app for measuring power consumption of location services
Swift
4
star
30

core-location-tester-ios

Demo iOS app for testing Core Location accuracy
Swift
3
star
31

SneakPeekScroll

An iOS demo app showing a scroll view with images and lets you see a portion of the next and previous images
Swift
3
star
32

evgenii.com

My personal web site at http://evgenii.com
JavaScript
3
star
33

FortranFromPython

An example of running a Fortran code from Python
Python
3
star
34

siba

Simple backup and restore utility
Ruby
2
star
35

tarpan

Python functions for analysing cmdspanpy output
Python
2
star
36

image_compressor_c

An image compressor program written in C that uses singular value expansion
C
2
star
37

docker-rails-fig-sample

A sample Rails/Postgres app that shows how to use Docker and Fig
Ruby
2
star
38

oct_viewer

Demo of the OCT viewer
JavaScript
1
star
39

siba-destination-ftp

FTP destination for SIBA backup and restore utility.
Ruby
1
star
40

watch-kit-app-demo

Demo WatchKit app from the video tutorial.
Swift
1
star
41

walk-to-circle-android

An Android app for those who like walking
Java
1
star
42

distance_from_parallax

A Python program that plots distances measured from simulated parallaxes.
Python
1
star
43

covid19

A naive Stan model of confirmed COVID-19 cases that uses logistic function.
Python
1
star
44

siba-source-mysql

Backup and restore MySQL database. This is an extension to SIBA utility.
Ruby
1
star
45

ai_teaches_me_ml

This is my logbook from my interactive lessons where ChatGPT teaches me ML
Jupyter Notebook
1
star
46

siba-destination-aws-s3

Backup to Amazon S3 cloud storage. This is an extension to SIBA backup and restore utility.
Ruby
1
star
47

SixBouncingButtons

An example of creating six buttons with bounce effect in Android
Java
1
star
48

siba-source-mongo-db

MongoDb backup and restore plugin for SIBA
Ruby
1
star
49

ASP3162

Codes for ASP3162 labs
Fortran
1
star
50

WatchKitParentAppBenchmark

A demo app showing how to communicate between watchOS and iOS using the sendMessage method of watch connectivity framework.
Swift
1
star