iOS_在UITableViewCell按钮点击处理中使用Run
2016-12-07 本文已影响63人
旅橙
- 一直都觉得Runtime博大精深,但也越想逐步学习和使用.今天记录下在项目开发中的一点小应用.
- 实现了点击事件可以将指定Model传到函数中,特定情境更方便处理.
1.头文件以及静态字符串
#import <objc/runtime.h>
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上的电话按钮拨打指定号码.
欢迎交流.