經驗之談—UIButton傳值通過枚舉

  • 其實在我們開發中,經常會遇到有些朋友寫的代碼裏面,由很多的數字,如果你突然看到了一堆的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];
    }
}

然後這樣的話,我們外面的控制器 調用起來,就顯得非常方便了。有時候,我們寧願寫多點代碼,也要讓代碼的可讀性更強

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章