only Group Conversation needDetectMention

This commit is contained in:
nixzhu
2016-01-11 18:00:37 +08:00
parent 240ae2fdbb
commit 2b3e17078f
3 changed files with 45 additions and 32 deletions
+4
View File
@@ -740,6 +740,10 @@ class Conversation: Object {
var latestValidMessage: Message? {
return messages.filter({ ($0.hidden == false) && ($0.deletedByCreator == false && ($0.mediaType != MessageMediaType.SectionDate.rawValue)) }).sort({ $0.createdUnixTime > $1.createdUnixTime }).first
}
var needDetectMention: Bool {
return type == ConversationType.Group.rawValue
}
}
// MARK: Feed
@@ -297,6 +297,12 @@ class ConversationViewController: BaseViewController {
var conversationDirtyAction: (() -> Void)?
var conversationIsDirty = false
private var needDetectMention = false {
didSet {
messageToolbar.needDetectMention = needDetectMention
}
}
private var selectedIndexPathForMenu: NSIndexPath?
private var realm: Realm!
@@ -891,13 +897,7 @@ class ConversationViewController: BaseViewController {
// view.addSubview(conversationFPSLabel)
#endif
// usersMatchWithUsernamePrefix("i", failureHandler: nil) { users in
// println("usersMatchWithUsernamePrefix: \(users)")
//
// delay(1) { [weak self] in
// self?.mentionView.users = users
// }
// }
needDetectMention = conversation.needDetectMention
}
override func viewWillAppear(animated: Bool) {
@@ -958,31 +958,35 @@ class ConversationViewController: BaseViewController {
self?.trySnapContentOfConversationCollectionViewToBottom()
default:
self?.mentionView.hide()
if self?.needDetectMention ?? false {
self?.mentionView.hide()
}
}
}
// MARK: Mention
messageToolbar.tryMentionUserAction = { [weak self] usernamePrefix in
usersMatchWithUsernamePrefix(usernamePrefix, failureHandler: nil) { users in
dispatch_async(dispatch_get_main_queue()) { [weak self] in
if needDetectMention {
messageToolbar.tryMentionUserAction = { [weak self] usernamePrefix in
usersMatchWithUsernamePrefix(usernamePrefix, failureHandler: nil) { users in
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.mentionView.users = users
self?.mentionView.users = users
guard !users.isEmpty else {
self?.mentionView.hide()
return
guard !users.isEmpty else {
self?.mentionView.hide()
return
}
self?.view.layoutIfNeeded()
self?.mentionView.show()
}
self?.view.layoutIfNeeded()
self?.mentionView.show()
}
}
}
messageToolbar.giveUpMentionUserAction = { [weak self] in
self?.mentionView.hide()
messageToolbar.giveUpMentionUserAction = { [weak self] in
self?.mentionView.hide()
}
}
// messageToolbar stateTransitionAction
@@ -1120,7 +1124,9 @@ class ConversationViewController: BaseViewController {
})
}
self?.mentionView.hide()
if self?.needDetectMention ?? false {
self?.mentionView.hide()
}
}
// MARK: Send Audio
+13 -10
View File
@@ -143,6 +143,7 @@ class MessageToolbar: UIToolbar {
var notifyTypingAction: (() -> Void)?
var needDetectMention = false
var tryMentionUserAction: ((usernamePrefix: String) -> Void)?
var giveUpMentionUserAction: (() -> Void)?
@@ -488,22 +489,24 @@ extension MessageToolbar: UITextViewDelegate {
if let text = textView.text {
state = text.isEmpty ? .BeginTextInput : .TextInputing
let parts = text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
if needDetectMention {
let parts = text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
if let lastPart = parts.last {
if lastPart.hasPrefix("@") {
let usernamePrefix = lastPart.substringFromIndex(lastPart.startIndex.advancedBy(1))
if let lastPart = parts.last {
if lastPart.hasPrefix("@") {
let usernamePrefix = lastPart.substringFromIndex(lastPart.startIndex.advancedBy(1))
if !usernamePrefix.isEmpty {
mentionUsernameRange = text.rangeOfString(lastPart)
tryMentionUserAction?(usernamePrefix: usernamePrefix)
if !usernamePrefix.isEmpty {
mentionUsernameRange = text.rangeOfString(lastPart)
tryMentionUserAction?(usernamePrefix: usernamePrefix)
return
return
}
}
}
}
giveUpMentionUserAction?()
giveUpMentionUserAction?()
}
}
}
}