block使用的场景是:
1、有关使用代码来写相应的View而不是xib或者storyboard的时候,我们经常需要用到按钮等控件,我们一般可以使用代理或者b'lock这两种方式来解决。
先看看代理的使用:
//按钮的触发事件,相应的容器方法 reSetPassword
[_serviceLeft addTarget:self action:@selector(reSetPassword) forControlEvents:UIControlEventTouchUpInside];
下面是相应的容器方法:reSetPassword
- (void)reSetPassword
{
NSLog(@"ghjgk");
[self.rdelegate toResetPass]; //这个是相应的代理方法
}
这样是用的前提就是我们要设置相应的代理声明定义
@protocol RegisterViewDelegate <NSObject>
- (void)toResetPass;
@end
@interface RegisterView : UIView
@property (nonatomic,assign) id<RegisterViewDelegate> rdelegate; //定义这个代理遵循的协议
@end
上面的都是在View中完成的,因为这些触发的动作要在Controller中完成,才可以与model等等的数据进行交互,才有意义。
下面是在Controller中的使用
//遵循协议,并定义View的对象
@interface RegisterViewController : UIViewController <RegisterViewDelegate>
@property (nonatomic,strong) RegisterView *registerView;
@end;
//需要在.m文件中设置代理
self.view = self.registerView;
然后就可以使用在view 中定义的代理方法了。
#pragma mark <RegisterViewDelegate>
- (void)toResetPass
{
NSLog(@"进入Controller界面");
[self.navigationController pushViewController:self.reSetPasswordViewController animated:YES];
}
//这里实现了相应的视图逻辑之间的转化。
}