上一篇文章講到了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
碼雲地址: