上一篇文章讲到了UITableView使用CHGAdapter框架来简单的编程(UITableView最简单的用法(CHGAdapter)),这一节咱们讲一下如何优雅的将cell、headerView、footerView中的输入事件传递到Controller中,包括UIButton的点击事件,UITextField的输入事件等等。git
首先是ViewController的代码github
#import <UIKit/UIKit.h> @interface Test2ViewController : UIViewController @end
#import "Test2ViewController.h" #import "Test2Model.h" #import "Test2TableViewCell.h" @interface Test2ViewController () @property (nonatomic,weak) IBOutlet UITableView *tableView; @property (nonatomic,strong) NSArray *data; @end @implementation Test2ViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"事件传递"; self.tableView.cellDatas = @[self.data]; //设置默认高度 self.tableView.tableViewAdapter.headerHeight = 0.01; self.tableView.tableViewAdapter.cellHeight = 50; self.tableView.tableViewAdapter.footerHeight = 0.01; self.tableView.eventTransmissionBlock = ^id(id target, id params, NSInteger tag, CHGCallBack callBack) { if ([target isKindOfClass:[Test2TableViewCell class]]) { NSLog(@"输入内容:%@",params); } return nil; }; } ///构造cell的数据,此处模拟 这些数据能够从网络获取 -(NSArray*)data { if (!_data) { _data = @[ [Test2Model initWithPlaceholder:@"请输入用户名" inputText:nil], [Test2Model initWithPlaceholder:@"请输入密码" inputText:nil], ]; } return _data; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
Model类Test2Model编程
#import <Foundation/Foundation.h> #import "CHGAdapter.h" @interface Test2Model : NSObject<CHGTableViewCellModelProtocol> @property (nonatomic,copy) NSString *placeholder;//输入框占位符 @property (nonatomic,copy) NSString *inputText;//输入的内容 +(instancetype)initWithPlaceholder:(NSString*)placeholder inputText:(NSString*)inputText; @end
#import "Test2Model.h" @implementation Test2Model +(instancetype)initWithPlaceholder:(NSString*)placeholder inputText:(NSString*)inputText { Test2Model * t2 = [Test2Model new]; t2.placeholder = placeholder; t2.inputText = inputText; return t2; } - (NSString *)cellClassNameInTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath { //若是一个model只对应一个cell 这里能够写死,就不须要外部传入。也能够根据model的某一个字段来判断使用哪个cell return @"Test2TableViewCell"; } - (CGFloat)cellHeighInTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath { return 80; } @end
cell类 Test2TableViewCellswift
#import "CHGTableViewCell.h" @interface Test2TableViewCell : CHGTableViewCell @property (nonatomic,weak) IBOutlet UITextField *textField; @end
#import "Test2TableViewCell.h" #import "Test2Model.h" @implementation Test2TableViewCell - (void)awakeFromNib { [super awakeFromNib]; // Initialization code [self.textField addTarget:self action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged]; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (void)cellForRowAtIndexPath:(NSIndexPath *)indexPath tableView:(UITableView *)tableView withData:(id)data { [super cellForRowAtIndexPath:indexPath tableView:tableView withData:data]; Test2Model * model = data; self.textField.placeholder = model.placeholder; self.textField.text = model.inputText; } -(void)textFieldValueChanged:(id)sender { //能够将输入内容记录在model中 Test2Model * model = self.cellData; model.inputText = self.textField.text; //能够将输入事件传递到ViewController中 self.eventTransmissionBlock(self, self.textField.text, 0, ^id(id data) { return nil; }); } @end
以上就完成了一次最简单的将输入框的输入事件实时的传递到Controller网络
运行效果框架
若是须要响应cell点击能够作以下设置异步
self.tableView.tableViewDidSelectRowBlock = ^(UITableView *tableView, NSIndexPath *indexPath, id itemData) { //cell点击回调 };
此处演示的是UITextField的输入事件实时传递到ViewController中,你能够根据本身的实际状况返回包括UIButton在内的全部UI控件的事件传递,而且支持Controller中同步和异步返回Cell结果。atom
GitHub地址:.net
码云地址: