关于iOS对象/方法委派的概念性问题

1 iphone delegates class objective-c

我有视图控制器A,表视图控制器B和视图控制器C.在A的viewDidLoad方法中,我添加B作为A的子视图.当A中的插座被轻敲时,C被呈现为模态视图.当插座插入C时; 我需要在B中调用一些方法.如果两者之间没有直接关系,我怎么能将B设置为C的委托?还有另一种方法吗?

Jos*_*ell 6

您可能需要重新考虑您的设计.如果"有B和C之间没有直接关系",那么C不应该调用B.方法.如果C 确实需要调用基于B方法,则一个关系.

也就是说,由于您的视图控制器A知道这两个对象,它可以充当它们之间的链接.你可以在A上调用一个方法,然后在B上调用一个方法.当然,这要求C对A有一个引用; 因为你说在A中点击按钮时会显示C,所以C通过其parentViewController属性具有这样的引用.例如:

// In C
- (IBAction) buttonPressed {
    [self.parentViewController passMessageToB:self];
}

// In A
- (void) passMessageToB: (id)sender {
    // sender is a reference to C, so B will be able to
    // pass information back if needed
    [B actOnMessageFromC:sender];
}

// In B
- (void) actOnMessageFromC: (id)sender {
    // Do whatever is needed
}
Run Code Online (Sandbox Code Playgroud)

这可能会使这更复杂 - 你甚至可以将一个特定的选择器传递给它可以调用B的A,但是那时我认为你肯定需要重新考虑你的设计以及B和C之间的连接.