【问题标题】:swift access container button快速访问容器按钮
【发布时间】:2015-01-14 20:23:46
【问题描述】:

我对 Swift 比较陌生。这是我的问题: 我有一个 UIViewController,里面有一个容器。容器有自己的 ContainerViewController。容器是应用的头部,里面有一个按钮。

我想根据按钮(在容器内)是否被按下来设置 UIViewController 内 Bool 的值。

我不认为传递带有 segue 的“mainVC”会成功:没有必要进行 segue,因为两个视图显示在同一个屏幕上。

我应该给视图和它的容器一个相同的 ViewControllerClass 吗?

非常感谢您的宝贵时间

【问题讨论】:

  • 包含视图控制器是包含视图控制器的父级。

标签: ios swift uiview uiviewcontroller


【解决方案1】:

有不同的解决方案:

  1. ContainerViewControllerparentViewController(=UIViewController) 上调用方法
  2. 使用响应者链:
    • UIViewController(子类)中实现canBecomeFirstResponder()以返回YES
    • 在父视图控制器中实现buttonPressed(sender:AnyObject)(或其他)方法
    • 从容器视图控制器中调用UIApplication.sharedApplication().sendAction("buttonPressed:", to: nil, from:self)

这将允许该方法“遍历”响应者链,直到找到实现buttonPressed() 方法的对象。如果您想在其他视图控制器中重用标题视图,此解决方案会很有用。

  1. 使用委托模式。在容器视图控制器中创建一个委托属性 + 协议,并在触发嵌入序列的 prepareForSegue() 方法中将父 vc 设置为委托。这也获得了重用友好的印记。

  2. 如果您使用 Storyboard,那么您也可以使用 Unwind Segue

【讨论】:

  • 感谢您提供如此完整的答案。第二种解决方案完美运行。我也会期待这个我不知道的“放松转场”。我希望我能赞成这个定性的答案,但我没有足够的声誉。无论如何,非常感谢你。这很有帮助。
  • 很高兴听到它有效。您仍然可以将此答案标记为解决问题的答案。
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2017-07-26
  • 2015-10-05
  • 2020-10-05
相关资源
最近更新 更多