关于按钮的action的问题

mikej的问题:

说到selector有个小问题: 比如我在处理UIButton 响应事件的时候,可能需要对不同按钮执行差不多的函数,比如我在做计算器的时候,按钮123456789,我分别定义成btn19,在create buttong时候我在addtarget由于不知道怎么把参数传给一个响应函数,所以只好定义9个接口函数。。。。

比如我想让接口响应函数写成如下格式,又没有办法
-(void) onTapNumberButton : (id) sender{
int nuber = sender.value……

我在addtarget定义的时候,action变量应该怎么传参数?

比较好的解决方法:

addTarget: action:语法能够传递的唯一参数就是sender,也就是按钮本身,比如NSButtonNSControl带有如下两个方法:-setTag:/-tag

因此,在Cocoa中比较好的做法是:

 

[btn1 setTag:1];

[btn2 setTag:2];

 

 

- (void)digitButtonPressed:(id)_sender {

NSLog(@"the user pressed: %i", [(BSControl *)_sender tag]);

}


不过UIControl并没有setTag这种方法。如果在iPhone中这样做不行,我想可否用UIButton的-titleForState和-setTitle:forStates:这两个方法来获取sender的title(官方SDK)。
 
对于iPhone非官方SDK,可以用下面的方法直接判断是哪个按钮:
 

[btn1 addTarget:self action:@selector(digitButtonPressed:) forEvents:255];

[btn2 addTarget:self action:@selector(digitButtonPressed:) forEvents:255];

 

- (void)digitButtonPressed:(id)_sender {

if ([_sender isPressed]) {

switch(_sender) {

case btn1:

break;

case btn2:

//code

break;

  }

       }

 }
 

==================================================================================================


我现在用了另外一个方式实现上述功能:
1.定义一个 UIButton的子类,将所有的button相关的信息写道子类初始化中,在本例里面,我将1,2,3,4,5,6这些数字参数写入 子类定义的变量 indicator中。
2.在写addtarget的时候 写成
btn2 addTarget:btn2 action:@selector(digitButtonPressed:) …];
这样在 UIButton的子类 UINumberButton里面写入子类的响应函数 digitButtonPressed
3.为了方便代码管理,在digitButtonPressed里面调用了View里面的统一处理函数 addNumber :(int) number 来实现计算器的所有功能。

这样就避免了大量地写switch函数,同时参数传递也不止一个了。比较方便。



http://www.cocoachina.com/b/?p=205#more-205

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值