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