GitHawkApp/MessageViewController

A SlackTextViewController replacement written in Swift for the iPhone X.

Swift

1,657

48 commits

updated Sep 25, 2019

See the code

README

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

githawk
ios
swift
uikit
uitextview

GitHawkApp/MessageViewController

A SlackTextViewController replacement written in Swift for the iPhone X.

Swift

1,657

48 commits

updated Sep 25, 2019

See the code

README

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

githawk
ios
swift
uikit
uitextview

Significant stargazers

Lily Ballard

1,030 followers · starred Feb 2018

Boris Bügling

1,573 followers · starred Jan 2018

Kim de Vos

52 followers · starred Jan 2018

NachoSoto

748 followers · starred Jan 2018