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持有的同时会传递参数到你点击事件的方法中