首先
我有一个ViewController,它有Button
该按钮将通过导航返回到特定的ViewController
cmds.file(myFile, i=True, type='FBX', ra=True, mnc=True, pr=True, lf=False, f=True)
在我的destinationViewController中具有TableView
我需要自动进行第一行
所以我在上面的setViewControllers之前写下这些代码
但是得到零
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)
这是destinationViewController
let indexPath = IndexPath(row: 0, section: 0)
destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
我的问题是我应该如何从另一个viewController调用想要的tableView的行?
答案 0 :(得分:0)
而不是
SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '=' (SQL: call individual_item_ledger(grl0170,2019-06-01,2019-06-30))
,为什么不打电话:
destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
答案 1 :(得分:0)
有很多事情与您所采用的方法不正确,但是由于它超出了原始问题的范围,因此我暂时将其忽略。
问题与代码:
您的tableView委托和数据源已在目标视图控制器的视图中设置完毕
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
}
但是您甚至在设置委托和数据源之前就尝试触发selectRow
(我的意思是,在您调用selectRow
时,您的viewDidLoad
甚至没有被调用)
let indexPath = IndexPath(row: 0, section: 0)
destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
因为您明确声明了
所以我在上面的setViewControllers之前写下这些代码
解决方案:
即使在调用selectRow(at:
两种可能的解决方案
1。确保在调用selectRow
要触发viewDidLoad
,您可以尝试
let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "destinationViewController") as! destinationViewController
let _ = destinationViewController.view
或者如果您更喜欢丑陋的方法,请手动致电viewDidLoad
:P
destinationViewController.viewDidLoad()
2。在调用selectRow
let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "destinationViewController") as! destinationViewController
destinationViewController.tableView.delegate = destinationViewController
destinationViewController.tableView.dataSource = destinationViewController
提示:
使用Pascal大小写输入类名DestinationViewController
答案 2 :(得分:0)
只需做一件事,在目标viewController中,在viewDidAppear之后更新tableView。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .top)
}