以编程方式从主线程以外的位置选择UITableView行

时间:2018-01-14 03:40:26

标签: swift uitableview

我有一个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

1 个答案:

答案 0 :(得分:1)

如果你想以编程方式触发tableView中某一行的选择,你必须像这样调用它:

self.tableView.delegate?.tableView!(self.tableView, didSelectRowAt: indexPath)

你的tableView没有方法didSelectRowAt,委托会这样做,上面这样做就是调用它。

另外,请不要忘记将tableView的委托首先设置为当前视图控制器,如果这是您所需的委托。

self.tableView.delegate = self