【问题标题】:UIViewController Intercommunication, is there any kind of method for forcing a UIViewController to update?UIViewController 互通,有什么方法可以强制 UIViewController 更新吗?
【发布时间】:2011-12-14 14:26:33
【问题描述】:

我正在创建一个UIViewController 来操作计算器界面,而另一个UIViewController 则用于绘制图表。

当用户按下 graph 按钮时,计算器会提示图形自行重绘。然后该图在计算器上执行对协议方法的回调,以获取每个给定 x 坐标的 y 值。

我想知道处理这种通信的标准方式是什么?我觉得我应该能够在UIViewController 上调用类似于setNeedsDisplay 的东西(我知道这实际上只是一个UIView 方法),但我有一种感觉我将不得不写另一个使用类似方法的协议。我缺少某种updateViewController 方法吗?

理想情况下,我希望我的计算器 UIViewController 仅知道图形为 UIViewController,而图形通过我定义的协议知道计算器。

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    您有几种方法可以做到这一点。

    1. 目标/行动
    2. 代表
    3. NSNotificationCenter
    4. KVO(键值观察)

    在您的情况下,KVO 似乎是最佳选择。基本上,您绘制的图表取决于您的计算器界面(如果我理解正确的话),因此您观察一些变量(读取键)以进行更改。看this document to learn more

    KVO 也可以让您优化图形绘制,因为您可以获得以前的值、新值等。事实上,根据定义:

    键值观察是一种允许对象在其他对象的指定属性发生变化时得到通知的机制。

    【讨论】:

    • 键值观察听起来很有趣,我在其他地方看到过NSNotificationCenter,但我喜欢那个文档关于KVO 的说法:“与使用NSNotificationCenter 的通知不同,没有中心对象为所有观察者提供更改通知。相反,当发生更改时,通知会直接发送到观察对象。这似乎不那么“单身”,我认为这是一件好事!
    • 在这种情况下是的,当然。但是说如果你有标签。选项卡中的视图控制器不知道另一个选项卡中的视图控制器。在那里,KVO 是不可能的(或者可能是丑陋的)。通知中心将是那里的最佳选择。顺便说一句,如果你认为这是正确的答案,你可以点击复选标记:)
    • 阅读更多内容后,我认为 Target/Action 更适合 UIViewController-UIView 通信,NSNotificationCenterKVO 似乎更适合模型间通信。我想毕竟我可能会使用 Delegates/Protocols,但很高兴知道 IOS 提供了哪些其他功能。
    【解决方案2】:

    据我所知,UIViewController 中没有任何东西可以完全满足您的需求。您可能需要按照您的建议执行某种协议,然后 [yourViewController.view setNeedsDisplay:]。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      有很多方法可以做到这一点,这已经在这里问过了。例如:

      iPhone how to pass data between several viewcontrollers

      在您的特定情况下,我会使用 NSNotification。在需要重绘的 viewController 中订阅它并发布来自另一个的通知。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2014-03-04
        相关资源
        最近更新 更多