A SlackTextViewController replacement written in Swift for the iPhone X.

Overview

Installation

Just add MessageViewController to your Podfile and install. Done!

pod 'MessageViewController'

Setup

You must subclass MessageViewController.

import MessageViewController

class ViewController: MessageViewController {
  // ...
}

Finish setup using a UIScrollView. Remember this can also be a UITableView or UICollectionView.

func viewDidLoad() {
  super.viewDidLoad()
  setup(scrollView: scrollView)
}

Customizations

You can customize any part of the UI that you want!

// Border between the text view and the scroll view
borderColor = .lightGray

// Change the appearance of the text view and its content
messageView.inset = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16)
messageView.textView.placeholderText = "New message..."
messageView.textView.placeholderTextColor = .lightGray
messageView.font = .systemFont(ofSize: 17)

// Setup the button using text or an icon
messageView.set(buttonTitle: "Send", for: .normal)
messageView.addButton(target: self, action: #selector(onButton))
messageView.buttonTint = .blue

// Set custom attributes for an autocompleted string
let tintColor = .blue
messageAutocompleteController.autocompleteTextAttributes = ["@": [.font: UIFont.preferredFont(forTextStyle: .body), .foregroundColor: tintColor, .backgroundColor: tintColor.withAlphaComponent(0.1)]]

Autocomplete

The base view controller uses a MessageAutocompleteController control to handle text autocompletion.

This control uses a plain UITableView to display its autocomplete. Add a dataSource and delegate to display and handle interactions.

let tableView = messageAutocompleteController.tableView
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.dataSource = self
tableView.delegate = self

Then register for autocomplete prefixes you want to respond to and set a delegate to handle when a prefix is found.

messageAutocompleteController.register(prefix: "@")
messageAutocompleteController.delegate = self

Your delegate needs to implement just one method.

func didFind(controller: MessageAutocompleteController, prefix: String, word: String) {
  // filter your data
  controller.show(true)
}

Note: You can perform asyncronous autocomplete searches. Just be sure to call messageAutocompleteController.show() when finished.

Acknowledgements

Comments
  • Inconsistent text view font

    Inconsistent text view font

    The latest release, 0.2.0, is causing the font to change in the text view as I type. Also introducing the left button has caused some really strange layout issues. For example, if I set showsLeftButton to false, the insets are rendered completely off center.

    bug 
    opened by AndrewBarba 20
  • Autocomplete feature only

    Autocomplete feature only

    Hi Ryan,

    Love the functionality of the autocomplete! I'm looking for a way to apply the autocomplete feature to a UITextView without all the other goodies.

    Example, add a UITextView to a storyboard ViewController and apply the autocomplete feature alone, by adding a custom class to the UITextView or however you suggest. Do you have any examples of this or point me in the right direction?

    Thanks for the help!

    question 
    opened by bribar 7
  • How to integrate MessageViewController with MessageKit or JSQMessageViewController

    How to integrate MessageViewController with MessageKit or JSQMessageViewController

    This library is really nice, but I'm wondering how to integrate it with others libraries to create a chat

    MessageKit has it's own Controller to inherit and MessageViewController too, what is the best pratique to mix theses libraries ?

    I've try to make a parent controller with MessageViewController and use JSQMessageViewController as a child (I know this library is deprecated)

    I've try to make the configuration of MessageViewController in both viewdidload but it crash because of UI constraint

    Thank you so much for your help

    question 
    opened by JulienKode 6
  • messageView.font seems to not be working?

    messageView.font seems to not be working?

    I keep trying to set the font on my messageView just like in the examples

    messageView.font = .systemFont(ofSize: 15) or messageView.font = .systemFont(ofSize: 20) or whatever

    and it always seems to start going back to [I think] size 17 font.

    Screenshot below shows size 20 font for the first word then for some reason gets smaller and stays like that.

    Realize I'm using a custom keyboard: Tried it with both default iOS keyboard and Gboard.

    img_5202

    question 
    opened by siefix 4
  • Input customization point

    Input customization point

    Originated from #53.

    As far as I can see there is no trivial way to do this, so I went the easiest way and forced developers implementing listeners to be cautious and do be aware about might-be-clashing manipulations of text and/or attributes.

    7e39198 tinily improved removing of autocompleted text leaving preceding character (which is probably a space AFAIK). (e.g "Hello @SD10" becomes "Hello " instead of "Hello")

    opened by viktorasl 4
  • SwiftLint

    SwiftLint

    Integrates SwiftLint to lint all the swifts! Closes #16

    Questions:

    • Anything else you might want in the .swiftlint.yml?
    • I've added SwiftLint Run Script Build Phases, do you want those?
    • I've used swiftlint --strict, that work? Or do you prefer it without --strict

    Code Changes (not just whitespace):

    • class ViewController: MessageViewController, UITableViewDataSource, UITableViewDelegate, MessageAutocompleteControllerDelegate was violating the line_length rule, so I switched it to class ViewController: MessageViewController ... extension ViewController: UITableViewDataSource, etc.. You may prefer a revert, and just disabling that rule there
    • Switching to block-based key-value observing as per SwiftLint rule

    swiftlint-command-line swiftlint-xcode
    Showing All Messages
    Test Suite 'All tests' started at 2018-02-03 00:12:09.183
    Test Suite 'MessageViewControllerTests.xctest' started at 2018-02-03 00:12:09.184
    Test Suite 'MessageViewControllerTests' started at 2018-02-03 00:12:09.185
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' started.
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' started.
    MessageViewController/MessageViewControllerTests/MessageViewControllerTests.swift:32: Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' measured [Time, seconds] average: 0.000, relative standard deviation: 143.525%, values: [0.000004, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' passed (0.262 seconds).
    Test Suite 'MessageViewControllerTests' passed at 2018-02-03 00:12:09.450.
    	 Executed 2 tests, with 0 failures (0 unexpected) in 0.263 (0.265) seconds
    Test Suite 'String_WordAtRangeTests' started at 2018-02-03 00:12:09.451
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' passed (0.002 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' passed (0.000 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' passed (0.001 seconds).
    Test Suite 'String_WordAtRangeTests' passed at 2018-02-03 00:12:09.462.
    	 Executed 8 tests, with 0 failures (0 unexpected) in 0.006 (0.011) seconds
    Test Suite 'MessageViewControllerTests.xctest' passed at 2018-02-03 00:12:09.462.
    	 Executed 10 tests, with 0 failures (0 unexpected) in 0.270 (0.278) seconds
    Test Suite 'All tests' passed at 2018-02-03 00:12:09.463.
    	 Executed 10 tests, with 0 failures (0 unexpected) in 0.270 (0.279) seconds
    
    Test Suite 'All tests' started at 2018-02-03 00:12:09.183
    Test Suite 'MessageViewControllerTests.xctest' started at 2018-02-03 00:12:09.184
    Test Suite 'MessageViewControllerTests' started at 2018-02-03 00:12:09.185
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' started.
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' started.
    MessageViewController/MessageViewControllerTests/MessageViewControllerTests.swift:32: Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' measured [Time, seconds] average: 0.000, relative standard deviation: 143.525%, values: [0.000004, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' passed (0.262 seconds).
    Test Suite 'MessageViewControllerTests' passed at 2018-02-03 00:12:09.450.
    	 Executed 2 tests, with 0 failures (0 unexpected) in 0.263 (0.265) seconds
    Test Suite 'String_WordAtRangeTests' started at 2018-02-03 00:12:09.451
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' passed (0.002 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' passed (0.000 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' passed (0.001 seconds).
    Test Suite 'String_WordAtRangeTests' passed at 2018-02-03 00:12:09.462.
    	 Executed 8 tests, with 0 failures (0 unexpected) in 0.006 (0.011) seconds
    Test Suite 'MessageViewControllerTests.xctest' passed at 2018-02-03 00:12:09.462.
    	 Executed 10 tests, with 0 failures (0 unexpected) in 0.270 (0.278) seconds
    Test Suite 'All tests' passed at 2018-02-03 00:12:09.463.
    	 Executed 10 tests, with 0 failures (0 unexpected) in 0.270 (0.279) seconds
    Test Suite 'MessageViewControllerTests.xctest' started at 2018-02-03 00:12:09.184
    Test Suite 'MessageViewControllerTests' started at 2018-02-03 00:12:09.185
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' started.
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testExample]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' started.
    MessageViewController/MessageViewControllerTests/MessageViewControllerTests.swift:32: Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' measured [Time, seconds] average: 0.000, relative standard deviation: 143.525%, values: [0.000004, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
    Test Case '-[MessageViewControllerTests.MessageViewControllerTests testPerformanceExample]' passed (0.262 seconds).
    Test Suite 'MessageViewControllerTests' passed at 2018-02-03 00:12:09.450.
    	 Executed 2 tests, with 0 failures (0 unexpected) in 0.263 (0.265) seconds
    Test Suite 'String_WordAtRangeTests' started at 2018-02-03 00:12:09.451
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenEmpty]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_thatUsesRightmostWord]' passed (0.002 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenLeftCharacterWhitespace_withRangeIncludingWords_thatUsesRightmostWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenNewline]' passed (0.000 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenRangeWithinWord]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_word_whenWhitespace]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenMultipleCharacters]' passed (0.001 seconds).
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' started.
    Test Case '-[MessageViewControllerTests.String_WordAtRangeTests test_wordParts_whenSingleCharacter]' passed (0.001 seconds).
    Test Suite 'String_WordAtRangeTests' passed at 2018-02-03 00:12:09.462.
    	 Executed 8 tests, with 0 failures (0 unexpected) in 0.006 (0.011) seconds
    Test Suite 'MessageViewControllerTests.xctest' passed at 2018-02-03 00:12:09.462.
    	 Executed 10 tests, with 0 failures (0 unexpected) in 0.270 (0.278) seconds
    
    
    Testing Complete    2018-02-03, 12:12 AM
    
    opened by knickmack 4
  • Add @mention highlighting support to autocomplete

    Add @mention highlighting support to autocomplete

    Hey!

    First off thanks for the GitHawk app, I use it all the time! I liked your implementation of autocomplete, as I to did something similar for an InputAccessoryView that made its way into MessageKit.

    I notice that in the GitHawk app @mention is highlighted with colors but not in the UITextView for the MessageViewController. Is this something you are already working towards? If not I would be happy to make a PR to support this feature! 😊

    question 
    opened by nathantannar4 4
  • Update project for Swift 5 and Xcode 11

    Update project for Swift 5 and Xcode 11

    • Moved SWIFT_VERSION from target level to project level and bumped it to 5.0
    • Updated podspec to support Swift 5
    • Updated travis to build with Xcode 11
    • Fixed a Swift 5 deprecation warning about String.Index.encodedOffset
    opened by benasher44 3
  • Dynamically increase textview size according to maxScreenRatio

    Dynamically increase textview size according to maxScreenRatio

    PR is based on the suggestions in https://github.com/rnystrom/GitHawk/issues/1613

    Additions

    • ability to set max ratio of screen to use for message view
    • ability to set maxHeight of message view
    • works well for devices with a hardware keyboard attached

    Tested On

    • Devices: iPhone 7,8
    • Simulators: iPhone 5s, X
    opened by KashishGoel 3
  • Highlight everything after setting text to empty then inserting

    Highlight everything after setting text to empty then inserting

    We need to clear the attributes.

    • Open an Issue in GitHawk
    • Select an autocomplete as first word and keep typing
    • airplane mode
    • Hit send

    GitHawk Upload by rnystrom

    Sent with GitHawk

    bug 
    opened by rnystrom 3
  • Rationale?

    Rationale?

    Hey, this looks interesting - I'm curious what (if anything) was missing from the heavy-inspiration-source of SlackTextViewController that caused you to create this library? Why would one use MessageViewController instead?

    question 
    opened by scottcc 3
  • Weird issue when started typing

    Weird issue when started typing

    First character becomes white color, next character become black color. Then when delete all text, typing color becomes normal again. Could you please support?

    opened by long-nguyen 0
  • How to change textColor or TextView. Scroll issue when started typing.

    How to change textColor or TextView. Scroll issue when started typing.

    I have integrated MessageViewController for Chat in my application. I am facing 2 issues right now:

    1. I am not able to change textcolor of the textview. I have dark and normal mode and I need to change the textColor based on mode I select.
    2. When I start typing into the textview, the tableview in which I am currently displaying the chat messages, scrolls up a little.

    Please reply me ASAP as we need to go in production and I have already move here from SlackTextViewController.

    opened by mohinimehetre-silicus 0
  • Removing the Font descender as button get push down

    Removing the Font descender as button get push down

    51784462-03c77300-216f-11e9-840d-01544822d0d8

    Button get push down as we can see in the image, the button is not centre align with with the textview's last line Removing the font descender in buttonYStarter fix the issue.

    opened by lohenyumnam 0
  • How to remove the animation

    How to remove the animation

    I am using this MessageViewController, with IGListKit, and I notice something when the viewController appears there is some kind of animation. is this just me ??

    question 
    opened by lohenyumnam 15
  • Autocomplete in landscape gets cut off

    Autocomplete in landscape gets cut off

    If there are many suggestions in autocomplete when in landscape mode the view can grow to high getting cut off by the navigation bar or another view above it.

    Sent with GitHawk

    bug good first issue 
    opened by Huddie 0
MQTT for iOS and macOS written with Swift

CocoaMQTT MQTT v3.1.1 client library for iOS/macOS/tvOS written with Swift 5 Build Build with Xcode 11.1 / Swift 5.1 Installation CocoaPods Install us

EMQ X MQTT Broker 1.4k Dec 29, 2022
A very flexible message bar for iOS written in Swift.

A very flexible message bar for iOS written in Swift.

SwiftKick Mobile 6.7k Jan 5, 2023
Messenger Clone - Real-time iOS Chat with Firebase Firestore written in Swift

Real time Swift iOS Chat with Firebase - Messenger Clone This is an extremely simple chat app source code of an iOS Swift Chat app. It leverages Messa

Instamobile 621 Jan 6, 2023
A fully fledged syscfg editor. Just the editor. Written in pure swift.

MagicCFG Reloaded The SysCFG Writing Utility - UPDATED, OSV Report Bug Table of Contents About MagicCFG Reloaded Getting Started Roadmap Contact Credi

Jan Fabel 47 Dec 31, 2022
Meerkat is a messaging app written using SwiftUI.

Meerkat - A Messaging App Purpose I studied to learn SwiftUI dynamics, understand the syntax, and learn how to integrate third party libraries. The ap

fischerweise 2 Jun 22, 2022
A lightweight framework to build chat applications, made in Swift

Chatto Chatto is a Swift lightweight framework to build chat applications. It's been designed to be extensible and performant. Along with Chatto there

Badoo Tech 4.4k Dec 19, 2022
Swift toolkit for passing messages between iOS apps and extensions.

_________ ___ ___ _ _____ _________ ___ ___ / / \ \ / / |_| ( ___ \ \__ __/ \ \ / / / _____/ \ \ /\ /

Abdullah Selek 58 Nov 3, 2022
Swift SDK for Apache Kafka

SwiftKafka A swift implementation of Kafka for producing and consuming from event streams. This works by wrapping the librdkafka C library. Swift vers

Kitura 54 Dec 21, 2022
A replacement for as which runs in constant time instead of O(n) when the conformance is not satisfiedA replacement for as which runs in constant time instead of O(n) when the conformance is not satisfied

ZConform A replacement for as? which runs in constant time instead of O(n) when the conformance is not satisfied. How it works ZConform does a one-tim

Emerge Tools 20 Aug 4, 2022
iPhone and iPod Touch version of Skeleton Key: is an addictive and unique puzzle game in which you shift keys around the board unlocking treasure chests. Made with cocos2d-iphone.

Skeleton Key (iOS) Skeleton Key is an addictive and unique puzzle game in which you shift keys around the board unlocking treasure chests. It's availa

null 117 Jun 6, 2022
Replacement for Apple's Reachability re-written in Swift with closures

Reachability.swift Reachability.swift is a replacement for Apple's Reachability sample, re-written in Swift with closures. It is compatible with iOS (

Ashley Mills 7.7k Jan 1, 2023
Custom UISegmentedControl replacement for iOS, written in Swift

TwicketSegmentedControl Custom UISegmentedControl replacement for iOS, written in Swift, used in the Twicket app. It handles the inertia of the moveme

Pol Quintana 1.7k Dec 31, 2022
A pixel perfect replacement for UITableView section index, written in Swift

MYTableViewIndex MYTableViewIndex is a re-implementation of UITableView section index. This control is usually seen in apps displaying contacts, track

Yury 520 Oct 27, 2022
Linenoise-Swift A pure Swift implementation of the Linenoise library. A minimal, zero-config readline replacement.

Linenoise-Swift A pure Swift implementation of the Linenoise library. A minimal, zero-config readline replacement. Supports Mac OS and Linux Line edit

Andy Best 114 Dec 14, 2022
A utility that reminds your iPhone app's users to review the app written in pure Swift.

SwiftRater SwiftRater is a class that you can drop into any iPhone app that will help remind your users to review your app on the App Store/in your ap

Takeshi Fujiki 289 Dec 12, 2022
STPopup provides STPopupController, which works just like UINavigationController in popup style, for both iPhone and iPad. It's written in Objective-C and compatible with Swift.

STPopup STPopup provides STPopupController, which works just like UINavigationController in popup style, for both iPhone and iPad. It's written in Obj

Kevin Lin 2.6k Jan 6, 2023
Voice Memos is an audio recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Swift.

VoiceMemos Voice Memos is a voice recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Sw

Zhouqi Mo 322 Aug 4, 2022
FileManager replacement for Local, iCloud and Remote (WebDAV/FTP/Dropbox/OneDrive) files -- Swift

This Swift library provide a swifty way to deal with local and remote files and directories in a unified way. This library provides implementaion of W

Amir Abbas Mousavian 890 Jan 6, 2023
Swift TTTAttributedLabel replacement

Nantes ?? This library is a Swift port/fork of the popular Objective-C library TTTAttributedLabel. Much ❤️ and credit goes to Mattt for creating such

Instacart 1k Dec 22, 2022
A community-driven replacement for JSQMessagesViewController

A community-driven replacement for JSQMessagesViewController https://messagekit.github.io Goals Provide a ?? safe ?? environment for others to learn a

MessageKit 5.4k Jan 7, 2023