Отправить выбор предложения TextInputController в MessageRowController

В моем приложении чата мои часы setupTable Функция помещает элементы из фиктивного массива поддельных сообщений в левый / правый ряд пузырьков чата сеанса чата. Если все элементы массива сообщений учтены в таблице, создается еще одна строка для IBAction кнопка ответа, которая представляет TextInputController как обычно.

Когда я нажимаю кнопку "Ответить", все работает так, как рекламируется, но я не могу понять, как разместить этот вариант предложения в новой строке чата. Я только знаю, как распечатать предложение выбора. Я хочу вставить RightMessageRow строка, чтобы держать предложение. Ваш типичный ChatController,

class ChatController: WKInterfaceController, WCSessionDelegate {

    @IBOutlet weak var nameTitle: WKInterfaceLabel!
    @IBOutlet weak var tableView: WKInterfaceTable!

    var msgArray = Array<AnyObject>()
    var rowTypeArray = Array<String>()
    var numberOfRows: Int = 1

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        self.msgArray = ["Hi" as AnyObject,"Hello" as AnyObject,"What are you doing?" as AnyObject,"I'm driving." as AnyObject,"I see." as AnyObject]

        DispatchQueue.main.async(execute: {
            self.setupTable(self.msgArray)
        })

    }

    func setupTable(_ messageArray:Array<AnyObject>) {

        numberOfRows = messageArray.count
        numberOfRows += 1
        self.rowTypeArray.removeAll()

        for i in 0 ..< numberOfRows {

            if(i==numberOfRows-1){
                rowTypeArray.append("QuickReplyRow")

            }else{

                if i % 2 == 0 {
                    rowTypeArray.append("MessageRightRow")
                }else{
                    rowTypeArray.append("MessageLeftRow")
                }

            }
        }
        self.tableView?.setRowTypes(rowTypeArray)

        for j in 0 ..< numberOfRows {

            if (j == numberOfRows - 1){

                if let row = tableView.rowController(at: j) as? QuickReplyRow {
                    row.QuickReplyButton.setTitle("Reply")
                }
            }else{
                let text = self.msgArray[j] as! String;
                if j % 2 == 0 {
                    if let row = tableView.rowController(at: j) as? MessageRightRow  {
                        row.msgTextLabel.setText(text)
                    }
                }else{
                    if let row = tableView.rowController(at: j) as? MessageLeftRow {
                        row.msgTextLabel.setText(text)
                    }
                }
            }
        }
        self.tableView.scrollToRow(at: rowTypeArray.count-1)

    }

    override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
        self.ReplyWithTextInputController()
    }

    override func willActivate() {
        super.willActivate()
    }

    override func didDeactivate() {
        super.didDeactivate()
    }

    @IBAction func ReplyWithTextInputController(){

        let phrases = ["OK", "I'm busy.", "Where are you?", "Thanks."]

        presentTextInputController(withSuggestions: phrases,
                                   allowedInputMode: WKTextInputMode.allowEmoji, completion: { (result) -> Void in

                                    guard let choice = result else {
                                        return
                                    }
                                    if let suggestion = choice[0] as? String {
                                        let requestValues = ["command" : suggestion]
                                        let session = WCSession.default
                                        print("Message = \(requestValues)")
                                        session.sendMessage(requestValues, replyHandler: { (reply) in
                                            // code eg: self.____ = reply["status"] as? String
                                            // or
                                            print("Reply: \(reply)")
                                        }, errorHandler: { (error) in
                                            print("Error sending message: \(error.localizedDescription)")
                                        })
                                    }

        })

    }

}

0 ответов

Читая из документа, это то, что вы ищете? Я еще не попробовал это сам, но, похоже, оно соответствует вашим требованиям. https://developer.apple.com/documentation/watchkit/wkinterfacetable/1615834-insertrows

insertRows(at:withRowType:)
Другие вопросы по тегам