2017-07-16 2 views
1

Ähnlich wie dieses Problem auf Github https://github.com/jessesquires/JSQMessagesViewController/issues/2132 auf Gerät und im Simulator, wenn Sie tippen, um Text in das Textfeld einzugeben, erscheint die Tastatur und das Textfeld/send-Schaltfläche verschwindet. . Ich kann nicht herausfinden, warum?Textfeld/Senden-Schaltfläche verschwindet auf der Tastatur Pop-on JSQMessagesViewController

EDIT: auch gegeben, dass JSQMessagesViewController ab gestern veraltet ist ... irgendwelche alternativen Bibliotheken? (EDIT EDIT: FYI sieht es aus, als ob MessageKit eine neue JSQMessages https://github.com/MessageKit/MessageKit bauen Haus wird)

Mein Code unten:

import UIKit 
import JSQMessagesViewController 

class MedChatViewController: JSQMessagesViewController { 



    var messages = [JSQMessage]() 
    var botID = "bot" 
    lazy var outgoingBubbleImageView: JSQMessagesBubbleImage = self.setupOutgoingBubble() 
    lazy var incomingBubbleImageView: JSQMessagesBubbleImage = self.setupIncomingBubble() 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     // No avatars 
     collectionView!.collectionViewLayout.incomingAvatarViewSize = CGSize.zero 
     collectionView!.collectionViewLayout.outgoingAvatarViewSize = CGSize.zero 

    } 

    override func viewDidAppear(_ animated: Bool) { 
     // messages from someone else 
     addMessage(withId: botID, name: "Bot", text: "Hello! I am here to help you") 
     // messages sent from local sender 
//  addMessage(withId: senderId, name: "Me", text: "I bet I can run faster than you!") 
//  addMessage(withId: senderId, name: "Me", text: "I like to run!") 
     // animates the receiving of a new message on the view 
     finishReceivingMessage() 
    } 

     // MARK: Collection view data source (and related) methods 

    override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAt indexPath: IndexPath!) -> JSQMessageData! { 
     return messages[indexPath.item] 
    } 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return messages.count 
    } 

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as! JSQMessagesCollectionViewCell 
     let message = messages[indexPath.item] 

     if message.senderId == senderId { 
      cell.textView?.textColor = UIColor.white 
     } else { 
      cell.textView?.textColor = UIColor.black 
     } 
     return cell 
    } 

    override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAt indexPath: IndexPath!) -> JSQMessageBubbleImageDataSource! { 
     let message = messages[indexPath.item] // 1 
     if message.senderId == senderId { // 2 
      return outgoingBubbleImageView 
     } else { // 3 
      return incomingBubbleImageView 
     } 
    } 

    private func setupOutgoingBubble() -> JSQMessagesBubbleImage { 
     let bubbleImageFactory = JSQMessagesBubbleImageFactory() 
     return bubbleImageFactory!.outgoingMessagesBubbleImage(with: UIColor.jsq_messageBubbleBlue()) 
    } 

    private func setupIncomingBubble() -> JSQMessagesBubbleImage { 
     let bubbleImageFactory = JSQMessagesBubbleImageFactory() 
     return bubbleImageFactory!.incomingMessagesBubbleImage(with: UIColor.jsq_messageBubbleLightGray()) 
    } 




    override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) { 

     let id = senderId 
     let name = "Me" 
     let text = text 
     // 4 
     self.addMessage(withId: id!, name: name, text: text!) 

     ApiAIService.sharedInstance.parseUserResponse(fromText: text!, success: { response in 
      //print("API.AI response = \(response)") 
      if let unwrappedResponse = response?.botResponse { 

       self.addMessage(withId: self.botID, name: "Bot", text: unwrappedResponse) 
       self.finishReceivingMessage() 

       JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4 

       self.finishSendingMessage() //TODO: What does this do? 
      } 

     }) { (error) in 
      print("API.AI error = \(error)") 
     } 

     // 5 
     self.finishReceivingMessage() 

     JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4 

     finishSendingMessage() // 5 
    } 

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

    //TODO: removes avatars? 
    override func collectionView(_ collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAt indexPath: IndexPath!) -> JSQMessageAvatarImageDataSource! { 
     return nil 
    } 


     // MARK: UITextViewDelegate methods 
} 

Antwort

0

dieses Problem gelöst .... ich einfach gebraucht Super in meinem viewWillAppear zu nennen:

override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(true) 
} 
Verwandte Themen