Code Bye

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

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

怎么能找到是buttonArray中的哪个button调用的clickHandler呢?

解决方案:20分
可以不加“:”号,这样就不传递任何值。但是假如你要加“:”号的话,一定会将当前的这个按钮传递到你指定的参数中。

– (void)click:(UIButton *)sender {}

如上所示,你会带一个button参数到方法中。原因是你点击的那个button是addsubview上去的,所以你点击的button的对像的持有者会变成他的父view,即使你把当前的button release掉了,你点击按钮的时候还是会把当前的按钮传递到方法中。原因是按钮是在堆内存中的,父view对它进行持有。为了更好的知道是哪一个button,你可以设置tag值,通过tag值可以很好的判断7个按钮到底哪个是哪个,终究还是理解好堆内存中的button对像,有两个或更多的持有者,其中父view持有的同时会传递参数到你点击事件的方法中


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明代码实现UIButton,添加点击事件,如何获取sender