insertRowAtIndexes watchKit Swift

insertRowAtIndexes watchKit Swift

我有一个结构

struct Question {
    var title: [String]
    var additionalInfo: String?
    var answers: [String]
}

和我添加数据的变量

var questions = [
    Question(title: ["What is the color of?", "additional color information"], additionalInfo: nil, answers: [
        "Blue",
        "Gray"
        ])
]

此数据加载到 AppleWatch 的 tableView 中。两种行类型分开 - TitleRowType(对于标题数组)和 AnswersRowType(对于答案数组)。

当我将值插入 struct's 数组时 - 我希望 tableView 中的行插入动画。

我知道有一个 insertRowAtIndexes 函数,但我无法理解它。 Apple 文档中提供的示例对我不起作用。这就是我想出的:

    let indexSet = NSIndexSet(index: Int) // Int is passed via the function
    tableView.insertRowsAtIndexes(indexSet, withRowType: "TitleRowType")

但是当我 运行 它时 - table 不会更新。 期待您的指点。

您必须执行 3 个步骤:

  1. 将新数据添加到您的数组
  2. 在 table
  3. 中插入一行
  4. 用新数据填充行

这是一个简单的例子:

class InterfaceController: WKInterfaceController {

    @IBOutlet var table: WKInterfaceTable!
    var items = ["row1", "row2", "row3"]

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        loadTable()
    }

    func loadTable() {
        table.setNumberOfRows(items.count, withRowType: "tableRow")
        var rowIndex = 0
        for item in items {
            if let row = table.rowControllerAtIndex(rowIndex) as? TableRowController {
                row.label.setText(item)
            }
            rowIndex++
        }
    }

    @IBAction func insertRow() {
        items.append("row4")
        let newIndex = items.count
        table.insertRowsAtIndexes(NSIndexSet(index: newIndex), withRowType: "tableRow")
        if let row = table.rowControllerAtIndex(newIndex) as? TableRowController {
            row.label.setText(items[newIndex])
        }
    }
}

TableRowController 是一个 NSObject 子类,它有一个 WKInterfaceLabel 出口来显示行数。

我用了一个按钮触发insertRow()