zoukankan      html  css  js  c++  java
  • 【转】 关于按钮点击时传值的问题讨论

      原文:http://blog.csdn.net/yxh265/article/details/10403357

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


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

     

      [cpp] view plaincopy
    1. -(void)buttonAction:(id)sender{  
    2.    int mid = ((UIButton *)sender).tag;  
    3.   
    4.    member *code = [mapValues objectForKey:[NSString stringWithFormat:@"%d",mid]];  
    5. }

                是不是很简单呢.


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

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

      //方法二,用运行时的objc_setAssociatedObject,objc_getAssociatedObject和objc_removeAssociatedObjects

      方法二举例如下:

      [objc] view plaincopy
    1. UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 140, 40)];  
    2.     button.backgroundColor = [UIColor redColor];  
    3.     [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];  
    4.     [self.view addSubview:button];  
    5.       
    6.     objc_setAssociatedObject(button, @"key", @[@"12",@"123"], OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
    7.       
    8.     button = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 140, 40)];  
    9.     button.backgroundColor = [UIColor greenColor];  
    10.     [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];  
    11.     [self.view addSubview:button];  
    12.   
    13.     objc_setAssociatedObject(button, @"key", @[@"45",@"678"], OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
    14.   
    15. - (void)buttonAction:(UIButton *)sender{  
    16.       
    17.     NSLog(@"%@", objc_getAssociatedObject(sender, @"key"));  
    18.       
    19.     //objc_removeAssociatedObjects(sender);//不用了,就删除。  
    20. }  

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

      感谢浏览~

  • 相关阅读:
    【java基础 11】java集合框架学习
    【java基础 10】hash算法冲突解决方法
    【java 基础 9】原来我从没有了解过String类
    阳光总在风雨后——研究生考后总结
    【java基础 8】垃圾收集算法及内存分配策略
    【java基础 7】java内存区域分析及常见异常
    【java基础 6】java的发展史简介
    springboot的使用体验和思考
    大道至简——你比你想象中更早接触微服务
    【Ts 3】Nginx的Http(图片)服务器配置+ftp上传使用说明
  • 原文地址:https://www.cnblogs.com/A--G/p/4538234.html
Copyright © 2011-2022 走看看