Отправить выбор предложения 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:)