当前位置: 代码迷 >> Iphone >> 代码实现UIButton,添加点击事件,如何能获取sender
  详细解决方案

代码实现UIButton,添加点击事件,如何能获取sender

热度:69   发布时间:2016-04-25 05:49:09.0
代码实现UIButton,添加点击事件,怎么能获取sender?
故事是这样的,很久很久以前,有7个可爱的小UIbutton,是再代码里,是用
    NSMutableArray *buttonsArray = [NSMutableArray array];
    for (int i = 0; i < 7; i ++) {
        UIButton *button = [[UIButton alloc]init];
        //...略去给button设置frame或者layer上的属性的代码
        [buttonsArray addObject:button];
        [button addTarget:self action:@selector(clickHandler)
         forControlEvents:UIControlEventTouchUpInside];
    }
  这样的创建出来的,然后这个7个按钮,点击之后都需要执行clickHandler这个方法,于是有了上面:
   [button addTarget:self action:@selector(clickHandler)
        forControlEvents:UIControlEventTouchUpInside];

可是呢,这个clickHandler这个方法太调皮了,它非要打一顿那个调用它的button,这时候问题就出来了,怎么能找到是buttonArray中的哪个button调用的clickHandler呢?
------解决方案--------------------
是这样的,你可以不加“:”号,这样就不传递任何值。但是如果你要加“:”号的话,一定会将当前的这个按钮传递到你指定的参数中。
- (void)click:(UIButton *)sender {}
如上所示,你会带一个button参数到方法中。因为你点击的那个button是addsubview上去的,所以你点击的button的对像的持有者会变成他的父view,即使你把当前的button release掉了,你点击按钮的时候还是会把当前的按钮传递到方法中。因为按钮是在堆内存中的,父view对它进行持有。为了更好的知道是哪一个button,你可以设置tag值,通过tag值可以很好的判断7个按钮到底哪个是哪个,终究还是理解好堆内存中的button对像,有两个或者更多的持有者,其中父view持有的同时会传递参数到你点击事件的方法中
  相关解决方案