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; }