在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
有任何建议吗?
答案 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
}