准备Segue和AccessoryButtonTappedForRowWith

时间:2017-03-26 13:05:57

标签: swift3

在TableView中单击一个accessoryButton后,它会先将我重定向到 PrepareforSegue 功能,然后再重定向到 accessoryButtonTappedForRowWith 在我的代码中创建错误的函数。

请查看我的代码:

var indexPathAccessory: Int?  

override func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    indexPathAccessory = indexPath.row
}

indexPathAccessory 包含行的值,其中单击了 附件按钮 。 第二个功能是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Add" {
        let nc = segue.destination as! UINavigatorController
        controller = nc.topViewController as! AVC
        //Comment 1
        controller.name = span[indexPathAccessory]
        //Comment 2

        controller.delegate = self
    }
} 

点击 附件按钮 后出现错误原因,它首先将我重定向到 prepareforSegue 功能然后到 accessoryButtonTappedForRowWith 并且由于 indexPathAccessory 的值仍为零,我收到此错误

是否可以先在 accessoryButtonTappedForRowWith 上跳转,以获取 indexPathAccessory 的值,然后转到 prepareForSegue ? 如果是,问题将得到解决。

如果 indexPathAccessory 为零,我尝试添加一个测试以返回。 应用程序运行没有错误但没有正确的方式:
我可以看到 controller.name 等于 “test” ,但当我在AVC View控制器上时, 名称 变为 nil

有任何建议吗?

2 个答案:

答案 0 :(得分:1)

其中一个解决方案可以是 - 从故事板中删除segue,从而导致控制失控,并在accessoryButtonTappedForRowWith方法中编写performSegue。

答案 1 :(得分:0)

最后通过删除 accessoryButtonTappedForRowWith 功能,并将以下代码添加到 prepareforSegue 函数:< / p>

        if let indexPath = tableView.indexPath(for: sender as! UITableViewCell) {

            controller.beamName = "Test"

            indexSpanAccessory = indexPath.row
        }