导航栏带Block的返回按钮

项目已经完成了,设计师说导航栏的返回按钮丑,重新弄。这个确实不难。但是我重新自定义的视图添加到UIbarButtonItem上以后还需要有点击事件,就还需要在写一个返回的方法。所以一个界面要在两处修改。因为界面多,每个界面都修改两处我闲多,就想添加返回按钮的时候加上Block这样可以写一处就可以了。

自己写了一阵没有成功,只能说水平太浅需要借鉴被人的。参考大神的网址:IOS开发之自定义Button, 我要实现的功能很简单,比大神写的还简单,只是我项目中够用了,以后再用时再写。我的需求是把导航栏的返回按钮变成一个图片,点击返回。

1.自定义了一个按钮,继承于UIView

2.先声明一个block 

typedef void(^BackButtonWillBlock) (BackButton *sender);

3.写创建按钮的类方法,带block

+ (instancetype)buttonWithBlock:(BackButtonWillBlock)block;

4.在.m文件的匿名拓展中再声明一个Block做中转站

@property (nonatomic, strong) BackButtonWillBlock willBlock;

5.实现类方法

+ (instancetype)buttonWithBlock:(BackButtonWillBlock)block {

BackButton *btn = [[BackButton alloc] initWithFrame:CGRectMake(0, 0, kSize(9), kSize(12/7.0*9))];

btn.image = [UIImage imageNamed:@"back"];   // 这个返回按钮我只需要一个图片

btn.willBlock = block;  // 将block给中转站

return btn;

}

6.实现按钮的点击方法,我用的UIView的开始点击事件

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {

if (self.willBlock) {

self.willBlock(self);

}

}

7.在Controller使用时就很简单了

// 返回按钮

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[BackButton buttonWithBlock:^(BackButton *sender) {

[self.navigationController popViewControllerAnimated:YES];

}]];

感觉在一个地方写比在两个地方写省事。

拙文不成敬意,希望有大神指点。

你可能感兴趣的:(导航栏带Block的返回按钮)