关于cell中textfield值回传的问题
2017-02-22 本文已影响256人
iOS程序员asdf
关于cell中textField值回传有很多办法,代理啊,block啊,都可以实现。
不过今天我给大家讲一个我自己想出来的方法。
我写了个小demo,里面什么都没有,不过基本原理还是可以看出来的。
代码非常简单,在viewController中只需要在返回cell的方法里面把接受这个数据的一个数组和所在的indexPath传进去就可以,代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
TextFieldCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
cell.data = _data;
cell.indexPath = indexPath;
return cell;
}
在cell.h 中需要定义两个属性接收,
#import <UIKit/UIKit.h>
#define kIndexPath @"indexPath"
#define kText @"text"
@interface TextFieldCell : UITableViewCell
@property (nonatomic, strong) NSMutableArray *data;
@property (nonatomic, strong) NSIndexPath *indexPath;
@end
只需要在cell的textfield中改变内容的方法中这么写就可以了:
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:_indexPath forKey:kIndexPath];
[dic setValue:textField.text forKey:kText];
[textField endEditing:YES];
[_data addObject:dic];
return YES;
大家注意:在view controller中传的是一个数组的地址指针。就是说如果在cell里面添加了元素,在view controller中也会添加,因为不是传过去的[_data copy],所以还是一个数组,这样就在viewController中同时变化。这样就实现了view controller和cell中数据同步的问题。
这样写首先代码非常简洁,逻辑非常清晰,可移植性好,如果别的view controller想用这个cell那么只需要把indexPath和数据源传过去就可以了,其余的根本不用考虑。最重要的是有的时候别人想不明白指针的应用,这样你就可以装逼了。。。