首页 > 代码库 > UI控件tag属性和魔法数字的处理

UI控件tag属性和魔法数字的处理

说明:tag属性有很大的用处,它就好像每个UI控件的id,当多个按钮指向同一个监听方法时,可以给方法带参数UIButton,然后根据不同的tag值

来判断执行哪个按钮的监听事件;

- (IBAction)up:(UIButton *)sender // 该方法有四个btn指向,tag值是下边的,即可根据不同tag值执行相应的代码
{
    //upMoveTag的tag是10
    //bottomMoveTag:11
    //leftMoveTag:12
    //rightMoveTag:13
    
    
    CGRect rect =  self.targetView.frame;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    switch (sender.tag) {
        case 10:
            rect.origin.y -= Delat;
            break;
        case 11:
            rect.origin.y += Delat;
            break;
        case 12:
            rect.origin.x -= Delat;
            break;
        case 13:
            rect.origin.x += Delat;
            break;
            
    }
    
    self.targetView.frame = rect;
  
    [UIView commitAnimations];
    
}

魔法数字:上述代码中的tag值10,11,12,13没什么实际意义,只是用来区分不同的button的,直接写死,很不方便其他的程序员阅读;

  解决办法,将这四个值写成一个枚举

// 枚举代替魔法数字,提高代码的可读性
typedef enum{
    
    upMoveTag = 10,
    bottomMoveTag,
    leftMoveTag,
    rightMoveTag,
    
} moveDirec;

// 监听事件中的代码的tag值就不用写死了,还提高可读性
CGRect rect =  self.targetView.frame;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    switch (sender.tag) {
        case upMoveTag:
            rect.origin.y -= Delat;
            break;
        case bottomMoveTag:
            rect.origin.y += Delat;
            break;
        case leftMoveTag:
            rect.origin.x -= Delat;
            break;
        case rightMoveTag:
            rect.origin.x += Delat;
            break;
            
    }