delegate:代理,为其他对象提供一种代理(协议)以控制对这个对象的访问。
我们来利用代理实现界面间反向传值,减少循环引用,降低耦合。
下面我们上代码来看:
首先:找到我们要提供代理的对象(在界面反向传值中,我们提供代理的对象跳转后的界面,即:反向传值界面)
然后:在.h文件声明协议
@protocol ReverseTheValueDelegate <NSObject>
- (void)reverseUsername:(NSString *)username;
@end
// 声明遵守协议的id类型属性
@property (nonatomic, assign) id<ReverseTheValueDelegate> delegate;
并在界面放回的方法中实现代理传值调用(如下代码 我们传回的是字符串‘666’)
- (void)goBackAction
{
[self dismissViewControllerAnimated:YES completion:nil];
if (self.delegate && [self.delegate respondsToSelector:@selector(reverseUsername:)]) {
[self.delegate reverseUsername:@"666"];
}
}
最后:我们找到遵守协议(delegate)的对象
有两种遵守协议的方式
// 方式一(在Class Extension遵守协议)
@interface ViewController () <ReverseTheValueDelegate>
@end
// 方式二(在Class Declaration遵守协议)
@interface ViewController : UIViewController <ReverseTheValueDelegate>@end
之后实现协议中的反向传值的方法获取需要得到的值(如下code 是获取下一界面的username字符串的值)
#pragma mark - ReverseTheValueDelegate
- (void)reverseUsername:(NSString *)username
{
NSLog(@"%@", username);
}