经验之谈—UIButton传值通过枚举

来源:互联网 发布:北欧游戏 知乎 编辑:程序博客网 时间:2024/06/16 05:25
  • 其实在我们开发中,经常会遇到有些朋友写的代码里面,由很多的数字,如果你突然看到了一堆的1,2,3,4,5,或者switch判断里面,case 1: cae 2: case 3 等等,这些代码往往给人很蒙的感觉。无从下手,其实这就是我们所说的可读性很差的代码。
  • 其实说起可读性的话,那么我们现在也顺便说一下注释的问题(题外话),其实我们发现,很多大公司,写的注释反而很少,为什么,因为他们的代码就是注释,命名很规范,一看就知道什么意思,那么这样相对来说,文字注释,就显得有点多余,所以,平时我们稍微注意一点,就是向大神靠近的方式。但是若我们命名不规范的话,那么还是建议,多写点注释,以便后期的维护等等。
  • 那这次说的枚举的话题,那我们就说一下,我们经常遇到的UIButton传值的问题,比如我们自定义一个工具条的时候,常常需要通过代理或者别的方式去告诉控制器,我们点了这个按钮,控制器你要做出点什么操作,我们就说这个例子吧。

我们先搞一个枚举

typedef enum {    ZYCustomToolbarButtonTypeCamera, // 拍照    ZYCustomToolbarButtonTypePicture, // 相册    ZYCustomToolbarButtonTypeEmotion // 表情} ZYCustomToolbarButtonType;

写一个代理

@class ZYCustomToolbar;@protocol ZYCustomToolbarDelegate <NSObject>@optional- (void)composeToolbar:(ZYCustomToolbar *)toolbar didClickButton:(ZYCustomToolbarButtonType)buttonType;@end@interface ZYCustomToolbar : UIView@property (nonatomic, weak) id<ZYCustomToolbarDelegate> delegate;

创建按钮

/** * 创建一个按钮 */- (UIButton *)setupBtn:(NSString *)image highImage:(NSString *)highImage type:(ZYCustomToolbarButtonType)type{    UIButton *btn = [[UIButton alloc] init];    [btn setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];    [btn setImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];    [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];    btn.tag = type;    [self addSubview:btn];    return btn;}

这里顺便说一下,我们一般通过这种方式创建按钮的时候,顺便把创建好的按钮返回去,可能现在用不到,但是后期也许会用得到。

然后我们初始化按钮:

- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {         // 初始化按钮        [self setupBtn:@"compose_camerabutton_background" highImage:@"compose_camerabutton_background_highlighted" type:ZYCustomToolbarButtonTypeCamera];        [self setupBtn:@"compose_toolbar_picture" highImage:@"compose_toolbar_picture_highlighted" type:ZYCustomToolbarButtonTypePicture];      [self setupBtn:@"compose_emoticonbutton_background" highImage:@"compose_emoticonbutton_background_highlighted" type:ZYCustomToolbarButtonTypeEmotion];    }    return self;}

点击事件:

- (void)btnClick:(UIButton *)btn{    if ([self.delegate respondsToSelector:@selector(composeToolbar:didClickButton:)]) {        [self.delegate composeToolbar:self didClickButton:btn.tag];    }}

然后这样的话,我们外面的控制器 调用起来,就显得非常方便了。有时候,我们宁愿写多点代码,也要让代码的可读性更强

2 0
原创粉丝点击