Protocol的代理方法的使用

@protocol(协议)类似于JAVA的interface(接口),不同的是协议的方法可以不实现也可运行程序,协议中不可声明实例变量,只有声明方法且不能实现方法,遵守协议的类表示该类已经包含该协议的方法声明,只需要在类对应的.m文件中实现便可。

// 定义协议
@protocol ZMMainViewControllerDelegate <NSObject>
@required  // 必选
- (void)showResultWithString:(NSString *)string;
@optional  // 可选
- (void)showResultWithcontrl:(ZMMainViewController *)contrl;
@end


@interface ZMMainViewController : UIViewController
// 定义代理
@property (nonatomic, weak) id<ZMMainViewControllerDelegate> delegate;

在.m中

- (void)click {
//    // 第一种方式进行传值
    if (self.delegate && [self.delegate respondsToSelector:@selector(showResultWithString:)]) {
        [self.delegate showResultWithString:self.textField.text];
    }
    }

这里要注意下,是self.deleagte去响应这个showResultWithString:方法,而不是self。

委托者.m文件中

- (void)click {
    self.mainVc = [[ZMMainViewController alloc] init];
    self.mainVc.delegate = self; // 设置代理,实现代理方法
    [self presentViewController:self.mainVc animated:YES completion:nil];
   }
   
// 通过代理传值
- (void)showResultWithString:(NSString *)string {

    self.label.text = string;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值