- 其實在我們開發中,經常會遇到有些朋友寫的代碼裏面,由很多的數字,如果你突然看到了一堆的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];
}
}
然後這樣的話,我們外面的控制器 調用起來,就顯得非常方便了。有時候,我們寧願寫多點代碼,也要讓代碼的可讀性更強