GitHawkApp / MessageViewController

A SlackTextViewController replacement written in Swift for the iPhone X.

Home Page:http://githawk.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add @mention highlighting support to autocomplete

nathantannar4 opened this issue · comments

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! 😊

@nathantannar4 love the idea! Practically though, I think it'll be pretty difficult to pull off b/c what would happen if you autocomplete something but then go back and edit it. Imagine:

  • Search for @
  • Tap "rnystrom", inserting "@rnystrom "
  • Then backspace to "@rnyst"
  • Type "abc" to have "@rnystabc"

You'd expect the full string to apply the prefix style, right?

Also needing to track when the prefix isn't inserted.

If you've got ideas on how to tackle this, I'm all ears! I think it'd be really slick 😎

I've been playing around off and on with different ideas. With my autocomplete solution I primarily rely on attributed strings, so I can add color and what not. I did initially run into your problem you mentioned but resolved it by always forcing the typingAttributes to be reset to a default before text is changed. But now the problem of [@highlighted][some other stuff] was present.

Looking at Facebook, WhatsApp, etc. it appears that when a user try to delete @mention text the entire autocomplete text is deleted. So that is the same approach I took.

Rather than keeping track of the prefix inserted like you mentioned I overcame this by applying a custom NSAttributedStringKey attribute to autocompleted text. This mean that if a range with that attribute ever is about to be removed, delete the entire substring.

Still a few bugs to work on but its working with this approach. Any problems you foresee with this?

demo

Super cool! I’d love this.

Sent with GitHawk

Is this completely done in #15? If so, we can close this :)