我有一个视图控制器,它使用委托协议来传回字符串数组。我现在有另一个视图控制器,我想使用相同的协议,但我已经使用了它,我在 Xcode 中收到警告Duplicate protocol definition of 'SearchDetailsDelegate' is ignored
。
我需要这两个视图传回一个数组供父视图控制器解析。什么是更合适的方式来实现我在这里需要做的事情?关键价值观察会是这里的路吗?
你有几个选择:
将您的协议重命名为不同的。
创建一个外部协议并在每个视图上采用该协议
向您的视图添加一个名为 ParentController 的属性,其类型为它的父级。
@property (strong,nonatomic) ParentViewController *ParentController;
(合成偏离当然)
然后,在您的 viewController 中,当您实例化视图时,将 viewController 分配为父级
YourView *childView = [[YourView alloc]init];
childView.parentController = self;
现在您可以在 viewController中添加一个可以接收字符串数组的方法
-(void)setStringsArray:(NSArray*)arr{
//do what ever you need with the array
//don't forget to add this method to your .h file so it will be visible
}
最后从视图发送字符串数组: [self.parentController setStringsArray:yourArray];
顺便说一句 ,如果您想知道发送数组的视图是什么,您可以:
-(void)setStringsArray:(NSArray*)arr fromView:(UIView*)senderView{
//do what ever you need with the array
//don't forget to add this method to your .h file so it will be visible
}
并使用
[self.parentController setStringsArray:yourArray fromView:self];
BTW 2 另一种选择是使用通知。
在单独的 .h 文件(目标 c 协议的新文件)中定义协议,然后将其包含在所需的视图控制器中。不建议在两个不同的视图控制器中重新定义相同的协议,因为在您的情况下