以编程方式按下带有UITableView iOS swift的UIViewController的后退按钮

时间:2019-02-05 21:48:04

标签: swift xcode uitableview uiviewcontroller

我有一个UIViewController,它实现UITableViewDelegate,UITableViewDataSource并包含一个UITableView作为成员变量。当用户单击该表的行之一时,应用程序将执行情节提要segue,以打开详细视图控制器。当然,该详细视图控制器在屏幕的左上方有一个按钮,即“后退”按钮,可以通过UIViewTable返回到UIViewController。

因此,假设我想以编程方式“单击”该后退按钮。我将如何迅速做到这一点?这是XCode 10.1中swift(swift 4?)的最新版本。

更新:

这就是我解决此问题的方法。如下面的答案所示,可以使用self.navigationController?.popViewController(animated:true)仅返回到先前的视图控制器。但是,我发现我还想做的是在该视图控制器中调用特定方法,以便一旦显示就执行某种行为。事实证明这也是可能的,但是在我的情况下,这有点棘手,因为先前的视图控制器实际上是UITabBarController。因此,我必须从UITabBarController获得我感兴趣的ViewController。我是这样的:

let numvc = navigationController!.viewControllers.count
let tvc:UITabBarController = navigationController!.viewControllers[numvc-2] as! UITabBarController
let my_vc: MyCustomVC = tvc.viewControllers![0] as! MyCustomVC
my_vc.some_function()

当然,这里MyCustomV是我的自定义视图控制器类,some_function()是我要在该类上调用的方法。希望这对某人有帮助。

2 个答案:

答案 0 :(得分:1)

确定要“单击”按钮吗?

  • 如果您需要关闭详细信息视图控制器,则只需致电navigationController?.popViewController(animated: true)
  • 或者,如果您想直接处理按钮,则可以告诉它发送其操作:backButton.sendActions(for: .touchUpInside)
  • 或者如果您绝对需要显示按钮单击动画,那么您将需要以下内容(您应该播放并选择适当的延迟):
    backButton.isHighlighted = true
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
        backButton.isHighlighted = false
        backButton.sendActions(for: .touchUpInside)
    }
    

答案 1 :(得分:0)

运行segue时,将对下一个视图执行“ pushViewController”方法,因此,如果要以编程方式返回到前一个视图,则只需执行以下操作即可弹出最后一个视图:

self.navigationController?.popViewController(animated: true)

更新 如果您有来自该viewController的多个选项,则只需要 if语句 ,如果没有,则可以删除并仅根据需要投射下一个视图并设置属性,自动完成功能为您编写 * prepare(for segue ... * 方法,这样您就不会遇到任何问题

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "yourSegueName" {
        let destinationVC = segue.destination as! CustomViewController
        destinationVC.labelExample.text = "Some text I'm sending"
    }
}