【问题标题】:Programmatically press back button for UIViewController with UITableView iOS swift使用 UITableView iOS swift 以编程方式按下 UIViewController 的后退按钮
【发布时间】:2019-06-29 19:30:30
【问题描述】:

我有一个 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() 是我想在该类上调用的方法。希望这对某人有所帮助。

【问题讨论】:

    标签: swift xcode uitableview uiviewcontroller


    【解决方案1】:

    当您运行 segue 时,您对下一个视图执行“pushViewController”方法,因此如果您想以编程方式返回上一个视图,您只需像这样弹出最后一个视图:

    self.navigationController?.popViewController(animated: true)
    

    更新 如果您有来自该 viewController 的多个 segue,您只需要 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"
        }
    }
    

    【讨论】:

    • 哇哦!这样可行。好的,额外的功劳 - 有没有一种简单的方法首先获取即将弹出的 VC,将其转换为任何自定义类(我知道它是什么),在其上设置一个属性,然后弹出它以显示它?
    • “好的,额外的功劳 - 有没有一种简单的方法首先获得即将弹出的 VC”您的意思是在这部分中推送而不是弹出,对吗?如果你这样做了,那么答案很简单,你只需要重写一个名为 prepare(for segue) 的方法,我会编辑我的答案,请不要忘记将其标记为已接受的答案
    • 其实我的意思就是我说的,就是在弹出之前先得到它。我更新了我的问题以反映我实际做了什么。但我会将您的答案标记为已接受,谢谢!
    【解决方案2】:

    您确定需要“点击”按钮吗?

    • 如果你只需要关闭细节视图控制器,你可以调用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)
      }
      

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多