iOS Runtime 手机移动程序开发iOS学习开发

关于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和数据源传过去就可以了,其余的根本不用考虑。最重要的是有的时候别人想不明白指针的应用,这样你就可以装逼了。。。

上一篇下一篇

猜你喜欢

热点阅读