【问题标题】:MVC design issue with notification from view to controller从视图到控制器的通知的 MVC 设计问题
【发布时间】:2013-07-13 21:21:58
【问题描述】:

我的不是真正的编程问题,而是关于 IOS 编程中的模型-视图-控制器设计模式的设计问题。我是 IOS 新手,但我真的想以正确的方式做事。所以我有这个视图可以做一些动画,但我想在动画结束时“通知”控制器。我知道视图不能引用控制器。阅读页面:https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/chapters/StreamlineYourAppswithDesignPatterns/StreamlineYourApps/StreamlineYourApps.html

在第一个图中,视图 - 控制器通信仅是 用户操作(来自视图的 IBActions)和来自控制器的 更新。我想到的可能的解决方案:

  • 通知,即使图中不存在也可以
  • 控制器轮询视图属性的状态,直到动画完成(如果我没记错的话可能会阻塞主线程)
  • Key Value Observing,好像是个Notification。

您有什么想法或最佳实践可以交流吗?提前致谢

【问题讨论】:

    标签: iphone ios model-view-controller


    【解决方案1】:

    虽然您可以使用 NSNotifications,但当您想要通知多个对象,或者您不知道要通知哪个对象时,最好使用它们。如果没有简单的方法从控制器获取对视图的引用,也可以使用它,但通常情况并非如此。 因此,您遗漏的一种方法,即委托,可能是最好的方法。该视图将定义一个委托协议,并在其动画结束时调用一个委托方法。控制器将自己设置为视图的委托,将实现该委托方法以适当地响应这些动画的结束。

    【讨论】:

    • 谢谢,我还没有考虑过委托,似乎这是一种有效的方法。
    【解决方案2】:

    由于您没有提供任何代码,我假设 ViewController 是导致动画的对象。如果是这样,那么动画的结束应该在一个块内处理。示例:

    [UIView animateWithDuration:0.5
                     animations:^(void) { your animation code here }
                     completion:^(BOOL finished) { your completion code here }];
    

    【讨论】:

    • 不,视图是启动动画的那个。我不能在控制器中执行此操作,因为视图具有对子视图的引用也可以以一种简洁的方式执行此操作,我不想在视图控制器中执行此操作。谢谢
    • 那么我认为通知是您最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多