iOS_在UITableViewCell按钮点击处理中使用Runtime

  • 一直都觉得Runtime博大精深,但也越想逐步学习和使用.今天记录下在项目开发中的一点小应用.
  • 实现了点击事件可以将指定Model传到函数中,特定情境更方便处理.

1.头文件以及静态字符串

  #import 

  static const  NSString *lala;

2.在CellforRow(TableView代理方法)中使用

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
  //根据指定的下标从数组取出要用的Model
  NSArray *dayArr = _totalDataArray[chosedWeekNum];
  LDJSchoolCarCheckModel  *model = dayArr[indexPath.section];
  LDJSchoolCarBabyModel *babyModel = model.content[indexPath.row];
    ...
    objc_setAssociatedObject(cell.phoneButton, &lala, babyModel, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    objc_setAssociatedObject(cell.upAndDownButton, &lala, babyModel, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  //上面其实有两个button都做了处理,为了简介下面只展开一个
  [cell.phoneButton addTarget:self action:@selector(callPhoneButtonClick:) forControlEvents:UIControlEventTouchUpInside];
    ...
  }

3.使用

   - (void)callPhoneButtonClick:(UIButton *)btn{
  //取出要用的model
  LDJSchoolCarBabyModel *babyModel = objc_getAssociatedObject(btn, &lala);
  //赋给全局的model,另一个方法可以直接用
  currentModel = babyModel;
  UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:[NSString stringWithFormat:@"呼叫%@?",babyModel.name] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
  alert.tag = 5000;
  [alert show];
  }
  - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  {
  if(alertView.tag == 5000 && buttonIndex == 1){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",currentModel.primary_mobile]]];
    }
  }
  • 以上通过使用objc_getAssociatedObject(属性扩展)实现了通过点击cell上的电话按钮拨打指定号码.
    欢迎交流.

你可能感兴趣的:(iOS_在UITableViewCell按钮点击处理中使用Runtime)