是否可以调用另一个视图控制器的tableview didSelect索引路径并执行它?

时间:2019-07-09 05:16:07

标签: ios swift uitableview

首先

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

3 个答案:

答案 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:

之前,也请确保将委托和数据源设置为tableView。

两种可能的解决方案

1。确保在调用selectRow

之前调用了viewDidLoad。

要触发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)
}