如何限制用户文本输入并禁用 JSQMessagesViewController 中的发送按钮

How to limit user text input and disable send button in JSQMessagesViewController

我正在使用 JSQMessagesViewController 构建消息传递应用程序,我想知道是否有办法要求用户的文本输入长度在 10 到 140 个字符之间。

我已经放了下面这段代码

if (text.characters.count <= 10 || text.characters.count >= 140) {
            self.inputToolbar.sendButtonOnRight = false
        }
        else {
            self.inputToolbar.sendButtonOnRight = true
        }

几个关键点比如函数didPressSendButton:

override func didPressSendButton(button: UIButton!, withMessageText text: String!, senderId: String!,
                                     senderDisplayName: String!, date: NSDate!) {

        let itemRef = messageRef.childByAutoId() // 1
        let messageItem = [ // 2
            "text": text,
            "senderId": senderId,
            "location": getLocation()
        ]
        itemRef.setValue(messageItem) // 3

        // 4
        JSQSystemSoundPlayer.jsq_playMessageSentSound()

        // 5

        finishSendingMessage()

        Answers.logCustomEventWithName("Message sent", customAttributes: nil)

    }

和我的 addMessages 函数:

func addMessage(id: String, text: String, displayName: String) {
    let message = JSQMessage(senderId: id, displayName: displayName, text: text)
    messages.append(message)
}

像这样:

func addMessage(id: String, text: String, displayName: String) {

if (text.characters.count <= 10 || text.characters.count >= 140) {
    self.inputToolbar.sendButtonOnRight = false
}
else {
    self.inputToolbar.sendButtonOnRight = true
    let message = JSQMessage(senderId: id, displayName: displayName, text: text)
    messages.append(message)

}

}

然而那是行不通的。

在我的 addMessages 函数中这样做对我来说有什么用:

if (text.characters.count <= 10 || text.characters.count >= 140) {
        // pass
    }
    else {
        let message = JSQMessage(senderId: id, displayName: displayName, text: text)
        messages.append(message)
    }

在这种情况下,字符过滤器有效但发送按钮仍处于启用状态,因此数据被发送到我的数据库,这是我不想要的。如果在文本输入不够长或太长时完全禁用发送按钮,对我来说效果会更好。

如果有人能帮我解决这个问题,那就太好了。谢谢!

您不应从栏中删除该按钮,而应将其禁用。我首先建议使用类似的方法为按钮设置禁用状态。

let sendButton = UIButton(frame: CGRect(x: 0, y: 0, width: 80, height: 35)) //You can change these values to fit your needs
sendButton.setTitle("Send", forState: .Normal)
sendButton.setTitleColor(UIColor.grayColor(), forState: .Disabled)
sendButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
sendButton.contentMode = .Center
self.inputToolbar?.contentView?.rightBarButtonItem = sendButton

然后您想根据输入字段中字符串的长度在该按钮上设置 userInteractionEnabled 属性。我们可以通过设置一个观察者来实现这一点。

首先获取对 inputField 的引用。 让输入字段 = self.inputToolbar.contentView.inputView 然后在该字段上设置一个观察器并更改 sendButtons 状态。

NSNotificationCenter.defaultCenter().addObserverForName(UITextFieldTextDidChangeNotification, object: inputField, queue: NSOperationQueue.mainQueue()) { (notification) in
        let text = self.inputField.text

您不需要在 if 语句周围使用括号 ()。 另外,我会围绕

交换你的逻辑
if text.characters.count >= 10 && text.characters.count <= 140 {
        if text == self.verifyPasswordField.text {
            self.sendButton.enabled = true
        } else {
            self.sendButton.enabled = false
        }
    }

如果你想成为一名 swift 忍者,你可以 shorthand 做到这一点。

self.sendButton.enabled = (text.characters.count >= 10 && text.characters.count <= 140)

只需将其放入一个函数中并确保调用它就可以了。如果输入文本不符合条件,按钮应更新其颜色。但是你也可能想告诉你的用户,这就是按钮被禁用的原因,但这只是我的意见。如果您还有其他问题,我希望这有助于让我知道。