ios - 如何将自定义委托(delegate)设置为 UITableViewController?

标签 ios swift uitableview delegates protocols

我的 tableview 中的一个单元格将我带到另一个 UITableViewController,我必须在其中选择一个选项。 我试图将第一个 viewcontroller 设置为 UITableViewController 的委托(delegate),但它不起作用,我需要传递所选数据。 我认为它不起作用,因为对于 UITableViewControllers,您没有设置委托(delegate),因为它们自动成为自己的委托(delegate)。 那我该怎么做呢? 我通过 self.navigationController?.popViewController(animated: true) 返回,这样我就不会丢失已经填充到第一个 View Controller 中的信息。 有没有办法为 UITableViewController 设置自定义委托(delegate),或者我应该将 tableview 放在常规的 viewcontroller 中?

谢谢

最佳答案

您正在将 UITableViewdelegate 设置为您的第一个 Controller 。不要那样做,这个 delegate 已经默认设置为这个 UITableViewController


相反,为了传递数据使用回调闭包:

class TVC: UITableViewController {

    var itemSelected: (Item) -> Void = { _ in }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        itemSelected(dataSourceArray[indexPath.row])
    }
}

并且在第一个 View Controller 中,当您呈现/推送它时设置关闭该 Controller

let vc = TVC(...)
vc.itemSelected = { item in // this is called when you call `itemSelected` from `TVC`
    // ... declare what will happen after item is selected
}
navigationController?.pushViewController(vc, animated: true)

或者如果你正在使用 segues

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "identifier" {
        let destination = segue.destination as! TVC
        destination.itemSelected = { item in
            // ...
        }
    }
}

关于ios - 如何将自定义委托(delegate)设置为 UITableViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288382/

相关文章:

ios - 我所有 View Controller 的中央数据源

ios - 数组计数的 UITableView 问题

ios - 无法将删除 subview 置于前面

swift - 如何在 Swift 中使用计时器避免 "variable was written to, but never read"警告

swift - 使用 Metal 和 SceneKit 的 Vuforia

swift - 将 nil 作为 UnsafePointer<UInt8> 传递

iphone - 为什么我的按钮按不动?

ios - 如何模仿 iOS 设置页面布局?

iphone - popViewControllerAnimated 不更新信息 iPhone SDK

ios - Objective-C : get location without delegate