gpt4 book ai didi

ios - 从没有 Controller 的 UITableView 触发 segue

转载 作者:行者123 更新时间:2023-11-28 06:57:03 25 4
gpt4 key购买 nike

我有一个放置在多个 ViewController 中的 UITableView 类。

当用户 didSelectRowAtIndexPath 时,我想转到另一个 ViewController。

但是,因为 UITableView 类是独立的,所以我无法从类中以编程方式触发转场,因为 self.performSegueWithIdentifier 中的 self self.showViewController 指的是一个 UITableView。

我知道应该由 ViewController 负责转场,但我无法从给定的 ViewController 访问 didSelectRowAtIndexPath(因为它不管理 UITableView)。

如何从不继承自 ViewController 的 UITableView 继续?

最佳答案

您需要一种方法来告诉 View Controller TableView 上的一行已被选中,以便 View Controller 可以执行转场。

委托(delegate)是启用此通信的好方法。

  1. 定义委托(delegate)协议(protocol)。

     protocol TableRowSelectionDelegate: class {
    func tableRowSelected(rowValue: String)
    }
  2. 在您的 TableView 类中定义一个委托(delegate)变量。

    var tableRowSelectionDelegate: TableRowSelectionDelegate?
  3. 在您的 TableView 类中,当表行被选中时,调用委托(delegate),传递行值(即来自您的模型的与所选索引路径相对应的数据)。使用可选的 ?运算符,以便如果未设置委托(delegate),则不会发生任何不良情况。

    tableRowSelectionDelegate?.tableRowSelected(rowValue)
  4. 将协议(protocol)添加到您的 View Controller 。

    class ViewController: UIViewController, TableRowSelectionDelegate
  5. 在您的 View Controller 中,将其设置为 TableView 类的委托(delegate)。

    tableViewClass.tableRowSelectionDelegate = self
  6. 在您的 View Controller 中实现协议(protocol)。

    func tableRowSelected(rowValue: String) {
    //perform the segue here...
    // if necessary, pass the row value to the destination
    // view controller before performing the segue
    }

此委托(delegate)协议(protocol)现在可以由所有使用您的 TableView 类的 View Controller 实现,并且每个 View Controller 都可以根据需要进行响应。也许你不会总是想继续。让代表决定。

关于ios - 从没有 Controller 的 UITableView 触发 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com