diff --git a/Yep/Realm/Models.swift b/Yep/Realm/Models.swift index 1fbfefbb..960b0b6a 100644 --- a/Yep/Realm/Models.swift +++ b/Yep/Realm/Models.swift @@ -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 diff --git a/Yep/ViewControllers/Conversation/ConversationViewController.swift b/Yep/ViewControllers/Conversation/ConversationViewController.swift index bcc8ec46..d008b4d5 100644 --- a/Yep/ViewControllers/Conversation/ConversationViewController.swift +++ b/Yep/ViewControllers/Conversation/ConversationViewController.swift @@ -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 diff --git a/Yep/Views/MessageToolbar/MessageToolbar.swift b/Yep/Views/MessageToolbar/MessageToolbar.swift index 386a77aa..7338be81 100644 --- a/Yep/Views/MessageToolbar/MessageToolbar.swift +++ b/Yep/Views/MessageToolbar/MessageToolbar.swift @@ -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?() + } } } }