【问题标题】:Trigger action between simultaneous visible View Controllers在同时可见的视图控制器之间触发动作
【发布时间】:2013-05-24 01:53:11
【问题描述】:

在搜索、查看和试验之后,我仍然在某个特定问题上失败了。 我是一名编程新手,所以碰巧我没有使用正确的搜索词 - 如果我创建了重复项,请多多包涵。

这是我正在苦苦挣扎的情况。

ViewController 1 有两个 UIToolBar。上方的工具栏按钮显示一个值,下方的工具栏按钮触发 ViewController 2 中的一个动作,该动作恰好是通过容器视图嵌入的 TableViewController。 原因是 - 我需要在滚动 TableView 时将工具栏保持在原位。

我使用委托协议将值从 VC2 发送到 VC1 的上部工具栏,工作正常。 但我无法使用 VC1 中的下方工具栏触发 VC2 中的操作。

我想问三个问题:

1.) 触发操作/解决问题的最佳实践是什么? 2.) 在 VC2 上使用名为“theButtonWasTapped”的方法时,代码的实际外观如何? 3.) 通过容器视图嵌入 TableView 的方法是正确的方法还是有更好的方法?

我试图阅读各种文档,但在这种情况下我什至不知道从哪里开始。

任何帮助将不胜感激,因为我已经为此沮丧了好几天,不知道我的精神障碍在哪里结束,我的缺席知识从哪里开始。

非常感谢!

【问题讨论】:

    标签: ios delegation


    【解决方案1】:

    如果 VC2 嵌入到容器视图中,那么它将是 VC1 的子视图控制器。因此,您可以使用 self.childViewControllers[0] 从 VC1 访问它。所以你应该可以在 VC1 中做这样的事情:

    -(IBAction)toolBarButtonTapped:(id) sender {
        SecondViewController *vc2 = self.childViewControllers[0];
        [vc2 methodInVC2];
    }
    

    【讨论】:

    • 非常感谢 - 您的解决方案完美运行。一个子问题 - 如果 VC1 不是 childViewController 怎么办?有什么方法可以让两个同时显示的视图在没有 segues 的情况下进行通信(如上所述)?
    • @BGC,如果它们都只是视图(而不是控制器),那么您可以在一个控制器中为每个视图提供出口。如果第二个视图是另一个控制器的视图,那么您不应该将其添加到另一个控制器的视图中而不使其成为子视图控制器。
    • 好的 - 谢谢。我在谈论 ViewControllers,而不是视图。我仍在尝试围绕 ViewControllers 以及如何使用来回的数据更新它们。但是您对我的帮助很大,并为我进一步研究提供了宝贵的起点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多