2016-08-06 11 views
1

JSQMessagesViewControllerを使用してメッセージングアプリケーションを構築していますが、ユーザーのテキスト入力に10〜140文字の長さが必要となるかどうかは疑問でした。このようようJSQMessagesViewControllerでユーザーテキストの入力と送信ボタンを無効にする方法

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

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機能:私はこのコードの以下の部分などの機能didPressSendButtonなどいくつかの重要なスポットで

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

を入れている

FUNCのそしてaddMessage(ID:文字列、テキスト:文字列の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) 
    } 

、文字のフィルタは動作しますが、送信ボタンは、まだ有効になっているので、データは私のデータベースに送信されます私は望んでいない。テキストの入力が十分に長くない、または長すぎない場合は、送信ボタンが完全に無効になっていれば、私の方がはるかに優れています。

誰かが私にこれを手伝うことができれば、それは素晴らしいことでしょう。ありがとう!

答えて

0

バーからボタンを削除するのではなく、無効にするだけです。私はまず、このようなものでボタンの無効状態を設定することを提案します。

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への参照を取得します。 let 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 
     } 
    } 

の周りにあなたのロジックを入れ替えます。

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

機能にそれをスローして、それを呼び出すことを忘れないでください。入力テキストが基準を満たさない場合、ボタンはその色を更新する必要があります。しかし、ボタンを無効にしている理由はユーザーに伝えたいかもしれませんが、それは私の意見です。私はあなたがこれ以上質問があればこれが私に知らせるのを助けてくれることを願っています。

+0

ところで、新しい 'sendButton'を作成する必要はありません。おそらく、単に 'self.inputToolbar.contentView.rightBarButtonItem'を使ってデフォルトのボタンにアクセスすることができます –

関連する問題