首先
我有一个视图控制器,它有按钮
该按钮将通过导航返回到特定的视图控制器
var viewControllers = self.navigationController!.viewControllers
while !(viewControllers.last is MainViewController) {
viewControllers.removeLast()
}
let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "destinationViewController") as! destinationViewController
viewControllers.append(destinationViewController)
self.navigationController?.setViewControllers(viewControllers, animated: false)
在我的目的地视图控制器有表视图
我需要自动执行第一行
所以我在上面的设置视图控制器之前写下这些代码
但得到零
let indexPath = IndexPath(row: 0, section: 0)
destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
这是目的地视图控制器
class DestinationViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
}
extension DestinationViewController:UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Here is user select can be triggered, but I want to call from another viewController
}
}
我的问题是我应该如何从另一个视图控制器调用我想要的表视图行?
而不是 destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
,为什么不打电话:
destinationViewController.
tableView(destinationViewController.tableView,
didSelectRowAt: IndexPath(row: 0, section: 0))
只需做一件事,在您的目标视图中控制器更新您的表视图后查看。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .top)
}