【问题标题】:Delegation between ViewControllersViewController 之间的委托
【发布时间】:2013-10-24 16:27:12
【问题描述】:

我知道如何在直接依赖的 ViewController 之间建立“正常”委托。因此,如果我说,我必须从一个视图向其上一个视图发送消息,我知道该怎么做。 但是,如果两者之间有更多的 ViewController,我该如何设置委托呢?

所以我假设我根据计划进行了这个设置:

ViewController1 -> ViewController2 -> ViewController3 (通过 ButtonPressed)(通过 ButtonPressed)

如果我想从 VC2 在 VC1 中设置一个(例如)NSString,我只需写入 prepareForSegue,我在其中调用 VC2:

VC2.delegate = self;

但是当我想在 VC3 和 VC1 之间传输数据而不需要更改 VC2 时,我该怎么办? 如果它不是“自我”,我该如何设置委托? 我知道我的描述很糟糕,但我无法更好地描述它。

我只想要这个:VC1 有一个按钮和一个标签;该按钮打开VC2,它也有一个按钮,但没有标签;这个 VC2Button 显示 VC3;通过触摸 VC3 中的按钮,我想更改 VC1 中的标签。但是不必设置一个委托给 VC2,然后另一个给 VC1,我知道这是如何工作的。

希望你能得到我想要的。

提前致谢!

【问题讨论】:

  • 检查其他通信来源,如 NSNotification 或 KVO。
  • 谢谢! NSNotification 解决了它!

标签: ios uiviewcontroller delegates


【解决方案1】:

NSNotificationCenter 可能会有所帮助,如果您不想维护太多指针只是为了将两个不相关的视图链接在一起。

【讨论】:

    【解决方案2】:

    您可以像这样将委托从 VC2 传递到 VC3:

    Inside VC1:
    VC2 *vc2 = [VC2 alloc] init];
    vc2.delegate = self;
    
    Inside VC2:
    VC3 *vc3 = [VC3 alloc] init];
    vc3.delegate = self.delegate;
    

    或者您可以使用目标选择器设计模式来实现这一点。

    Target-Selector 方式:

    Inside VC1:
    VC2 *vc2 = [VC2 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector];
    
    Inside VC2: Pass on the target/selector received from VC1
    VC3 *vc3 = [VC3 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector];
    

    【讨论】:

    • 但是我必须在每个 ViewController 中从 VC3 导入标头和协议,对吗?在 VC2 中也是如此。目标选择器设计模式是如何工作的?
    • 好吧对不起,我不明白。 to方式之间的最大区别是什么?在我看来,他们有同样的努力..
    • 不要误会我的意思,但我正在寻找一种方法来消除中间 VC 中的编码。所以我不必导入标头和委托或其他东西..
    • 委托使用的协议可以在 .h 文件中定义,这样您就不需要相互公开视图控制器头文件,而只需包含协议。 h 文件在那些使用它的文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多