我有视图控制器A,表视图控制器B和视图控制器C.在A的viewDidLoad方法中,我添加B作为A的子视图。当点击A中的插座时,C被呈现为模态视图。当插座插入C时;我需要在B中调用一些方法。如果两者之间没有直接关系,我怎么能将B设置为C的委托?还有另一种方法吗?
答案 0 :(得分: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
}
这可能会使这更加复杂 - 你甚至可以将一个特定的选择器传递给它可以调用B的A,但是那时我认为你肯定需要重新考虑你的设计以及B和C之间的联系。
答案 1 :(得分:1)
在你写的时候,你可以在一个公共类中访问( B& C ),即 A 。将 B 设置为 C 的代表非常容易。
答案 2 :(得分:0)
您可以按照以下方式执行此操作。
@interface C : UIViewController
{
id parent;
}
@property (nonatomic,retain) id parent;
@implementation C
-(IBAction)methodInC:(id)sender
{
[parent methodName]; //B is parent so this will call method declared in B.
}
@end
现在,当从C控制器呈现B时,分配对象并将父级设置为
objB.parent = self;
这样您就可以轻松调用B中声明的方法。
希望它有所帮助。