[ios]关于tablelist里的每个按钮点击时传值的问题讨论

           ios中按钮的事件要想传值,很麻烦,相信有玩过的人都了解.怎么传一个值如此麻烦呢.别的语言,随便传,传数组,对象都可以.不就是一个函数的参数嘛.而ios不一样.

   如果页面是一个按钮,只传一值,一个对象什么的,那就认了吧,只在.h文件 字义一个公共变量或者对象然后把它的值设好,然后在按钮的事件中直接这个值,就当是传了.

            如果要传两个,三个值,,那也认了吧,,还是定义公共变量.


            好像这么说,这招倒是通哦.都可以传值.于是日常的使用中,也就接受了.但是有一种情况.

            如果按钮在tablelist里,然后每个cell都有一个按钮呢.然后每一个按钮的点击事件都要传当前的cell的这个对象过去处理呢..这怎么办,


             方法还是可以一样,定一个NSMutableDictionary字典数组mapValues 变量在.h文件里.那如何让这个数组和cell里的button绑定呢.  有一个很巧的方法,就是结合button的tag来用.

             在cell初始时button时,顺便给这个button定义一个唯一的tag值,最好是用对象的某一个id, 如:Member.id,,然后再把这个id作为字典的key再用它绑定一个对象.

             [mapValuessetObject:Member forKey:Member.id];



              这样初始化好后,,,点击按钮的事件里就可以用,取值通过字典数组里取,也就简单了.

     -(void)buttonAction:(id)sender{
        int mid = ((UIButton *)sender).tag;
    
        member *code = [mapValues objectForKey:[NSString stringWithFormat:@"%d",mid]];
     }



            是不是很简单呢.



再补充一下,最近又想到了两种方法,那就是对button进行扩展属性。

//方法一,用继续UIButton类,新建两个文件,里成新增它的属性和方法都行。//这个简单,就不举例。

//方法二,用运行时的objc_setAssociatedObjectobjc_getAssociatedObjectobjc_removeAssociatedObjects


方法二举例如下:

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 140, 40)];
    button.backgroundColor = [UIColor redColor];
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    
    objc_setAssociatedObject(button, @"key", @[@"12",@"123"], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    button = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 140, 40)];
    button.backgroundColor = [UIColor greenColor];
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

    objc_setAssociatedObject(button, @"key", @[@"45",@"678"], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

- (void)buttonAction:(UIButton *)sender{
    
    NSLog(@"%@", objc_getAssociatedObject(sender, @"key"));
    
    //objc_removeAssociatedObjects(sender);//不用了,就删除。
}



以上同样可以让button带上各种值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值