GitPedia

MessageViewController

A SlackTextViewController replacement written in Swift for the iPhone X.

From GitHawkApp·Updated June 24, 2026·View on GitHub·

Just add `MessageViewController` to your Podfile and install. Done! The project is written primarily in Swift, distributed under the MIT License license, first published in 2018. It has gained significant community traction with 1,663 stars and 91 forks on GitHub. Key topics include: githawk, ios, swift, uikit, uitextview.

<p align="center"> <img src="/animation.gif" /> </p>

Installation

Just add MessageViewController to your Podfile and install. Done!

ruby
pod 'MessageViewController'

Setup

You must subclass MessageViewController.

swift
import MessageViewController class ViewController: MessageViewController { // ... }

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

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

Customizations

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

swift
// 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.

swift
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.

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

Your delegate needs to implement just one method.

swift
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

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from GitHawkApp/MessageViewController via the GitHub API.Last fetched: 6/24/2026