UITableView最简单的用法(CHGAdapter)事件传递
2018-08-23 12:30
716 查看
上一篇文章讲到了UITableView使用CHGAdapter框架来简单的编程(UITableView最简单的用法(CHGAdapter)),这一节我们讲一下如何优雅的将cell、headerView、footerView中的输入事件传递到Controller中,包括UIButton的点击事件,UITextField的输入事件等等。
首先是ViewController的代码
Model类Test2Model
cell类 Test2TableViewCell
以上就完成了一次最简单的将输入框的输入事件实时的传递到Controller
运行效果
如果需要响应cell点击可以做如下设置
此处演示的是UITextField的输入事件实时传递到ViewController中,你可以根据自己的实际情况返回包括UIButton在内的所有UI控件的事件传递,并且支持Controller中同步和异步返回Cell结果。
GitHub地址:
OC版、Swift版
码云地址:
OC版、Swift版
首先是ViewController的代码
#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类 Test2TableViewCell
#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结果。
GitHub地址:
OC版、Swift版
码云地址:
OC版、Swift版
相关文章推荐
- UITableView和UITableViewCell的一些简单用法
- swift里UITableView简单的用法
- UITableView的简单用法
- view、viewGroup事件传递简单测试
- 简单分析View中的事件传递
- iOS UITableView简单用法
- UITableView和UITableViewCell的一些简单用法
- android View事件传递
- uitableview的空白处不能响应 touchesbegan 事件
- 如何在激活某个View时把简单对象(T类)做为参数进行传递
- UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
- UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
- View工作原理(一)事件传递原理详解http://blog.csdn.net/ff20081528/article/details/17353869
- iOS开发UI基础—28使用UItableview完成一个简单的QQ好友列表(二)
- View事件传递
- 关于hit-test用法,视图事件传递链的控制
- UITableView简单解析
- Android Activity 和 ViewGroup中事件触发和传递机制
- android平级View之前的事件传递