将文本从单元格移动到另一个视图控制器中的文本标签

时间:2016-09-05 21:15:16

标签: ios swift

我创建了一个在表格视图中显示10个随机数的应用。这是我用的代码

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ShowNumber", for: indexPath)

    // Configure the cell...
    cell.textLabel?.text = "\(indexPath.row + 1): \(Int(arc4random_uniform(10001)))"

    return cell
}

现在我想能够点击一个单元格并被带到另一个视图控制器,并在页面中央显示随机数。我将视图控制器全部设置并链接到原始表视图。我在通过segue传递数据时遇到了麻烦。这就是我到目前为止所拥有的。我知道它未完成,我只是不知道该怎么做。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {   
    if segue.identifier == "showRandomNumber" {
        let controller = segue.destination as! ShowNumberTableViewController
        let selectedRow = (tableView.indexPathForSelectedRow as NSIndexPath?)?.row ?? 0
        controller.LabelText = 
    }

LabelText是我想要传递数据的标签的名称,但我不知道如何

2 个答案:

答案 0 :(得分:1)

使用indexPathForSelectedRow,您可以获得对触发segue的单元格的引用。然后,您可以访问该单元格中的textLabel,获取其值,并将其传递给下一个视图控制器。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {   
    if segue.identifier == "showRandomNumber" {
        let controller = segue.destination as! ShowNumberTableViewController
        if let indexPath = tableView.indexPathForSelectedRow {
            let cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell
            if let textToPass = cell.textLabel.text {
                controller.labelText = textToPass
            }
        }
    }
}

然后在ShowNumberTableViewController中你需要一个var labelText,在你的viewDidLoad()中你可以用

将它分配给该视图控制器中的textLabel
centerLabel.text = labelText

答案 1 :(得分:0)

您正在进行操作时,滚动表格视图时数字会发生变化。我认为你应该将数字保存在一个数组中。

关于如何抓取prepareForSegue:中所选的号码,我会这样做:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showRandomNumber" {
        if let cell = sender as? UITableViewCell, indexPath = tableView.indexPathForCell(cell) {
            let selectedNumber = numbers[indexPath.row]
            controller.labelText = String(selectedNumber)
        }
    }
}