我有一个UITableView控制器,在viewDidLoad中我以异步方式发出网络请求,调用UITableView方法。如果数据包含用户预先选择的匹配信息,我想前进到下一个视图控制器。这是我在回调中用于前进到下一个视图控制器的代码:
//search for row if it exists, then:
let indexPath = IndexPath(row: r, section: 0)
DispatchQueue.main.async(execute: {
self.tableView.reloadData()
self.tableView.selectRow(at: indexPath, animated: false,
scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)
})
当我调用self.tableView(didSelectRowAt:indexPath)时,我得到一个运行时失败而没有非常有用的堆栈跟踪。在以编程方式选择UITableView的一行之前,是否需要设置一些内容?
TIA
答案 0 :(得分:1)
如果你想以编程方式触发tableView中某一行的选择,你必须像这样调用它:
self.tableView.delegate?.tableView!(self.tableView, didSelectRowAt: indexPath)
你的tableView没有方法didSelectRowAt
,委托会这样做,上面这样做就是调用它。
另外,请不要忘记将tableView的委托首先设置为当前视图控制器,如果这是您所需的委托。
self.tableView.delegate = self