你的分享就是我们的动力 ---﹥

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

时间:2014-04-10 16:04来源:www.chengxuyuans.com 点击:
代码实现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持有的同时会传递参数到你点击事件的方法中

本文地址http://www.chengxuyuans.com/code/ios/76661.html