UITableView的封装和类的交互2
来源:互联网 发布:软件操作手册 编辑:程序博客网 时间:2024/06/05 17:00
UI总结之UITableView的封装和类的交互1中实现了简单的滚动视图的封装和类的交互,接下来就是封装表视图的过程了,我们可以从创建一个nib文件来创建一个容器视图。其实我们逻辑的搭建是由小到大,笼统来说就是我们先封装了滚动视图,然后再封装表视图,将滚动视图加到表视图中!@interface YXContentView () <UITableViewDataSource,UITableViewDelegate>@property (weak, nonatomic) IBOutlet UITableView *tableView;@end@implementation YXContentView// 只要当前的对象从xib文件加载过来,会默认调用这个方法 - awakeFromNib// 我们可以在这里设置一些初始化的属性- (void)awakeFromNib { // 封装好的滚动视图 YXADSView *adsView = [YXADSView adsView]; self.tableView.tableHeaderView = adsView; NSArray *images = @[@"ad_00",@"ad_01",@"ad_02",@"ad_03",@"ad_04"]; adsView.images = images; self.tableView.rowHeight = 100;}- (void)setDataArray:(NSMutableArray *)dataArray { // 更新子控件的中的数据 // 容器视图从控制器得到数据,直接给予表视图 让它加载数据 _dataArray = dataArray; [self.tableView reloadData];}+ (id)contentView { return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil] lastObject];}#pragma mark - UITableView 数据源方法- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { YXCustomCell *cell = [YXCustomCell customCellWithTableView:tableView]; cell.model = self.dataArray[indexPath.row]; return cell;}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [_delegate contentViewCellDidSelected:self model:self.dataArray[indexPath.row] index:indexPath.row]; if (self.myBlock) { self.myBlock(self,self.dataArray[indexPath.row],indexPath.row); }}- (void)contentViewCellDidSeletedWithBlock:(contentViewCellDidSelectedBlock)block { self.myBlock = block;}表视图的实现就很简单了,只需要将封装好的视图添加到表视图中,然后表视图本身从控制器得到数据模型展示数据,设置代理或者block来完成类与类之间的交互,typedef void(^contentViewCellDidSelectedBlock)(YXContentView * contentView, YXModels *models,NSInteger index);@protocol YXContentViewDelegate <NSObject>- (void)contentViewCellDidSelected:(YXContentView *)contentView model:(YXModels *)model index:(NSInteger)index;@end@interface YXContentView : UIView@property (nonatomic,strong) NSMutableArray *dataArray;@property (nonatomic,assign) id <YXContentViewDelegate> delegate;@property (nonatomic,copy) contentViewCellDidSelectedBlock myBlock;+ (id)contentView;- (void)contentViewCellDidSeletedWithBlock:(void(^)(YXContentView * contentView, YXModels *models,NSInteger index))block;我们可以在cell的点击代理方法中,将数据模型或者其他东西交给我们自定义的代理或者block去通信,这样我们的逻辑性就非常清晰了。注意点是在声明协议方法的时候最好规范书写,遵循系统书写协议的规范,这是一个良好的习惯。block相比代理来说更加灵活,它可以被声明为一个属性,只要block的地址已经在类与类之间得到了确认或者说是类与类之间的通信连接已经建立,我们可以随时调用block,一般情况下,我们可以声明方法将block代码块作为参数传递,这样写起来更加方便。
0 0
- UITableView的封装和类的交互2
- UITableView的封装和类的交互1
- UITableView的封装
- UITableView的简单封装
- android 和 js 之间交互的封装
- IOS UITableView表视图和导航控制器的交互使用
- IOS UITableview 的Cell 封装
- ios中封装网络和UITableView的综合运用
- webview和js的交互封装源码分享
- UITableView不同样式cell的封装
- 封装类DataProtocol 实现后台与页面的数据交互
- jQuery的Cookie封装,与PHP交互
- 前端交互封装的一些javaScript方法
- MVC、JSP实现mysql的增删改查功能的封装和简陋的界面交互
- UITableView的创建和使用
- UITableView的beginUpdates和endUpdates
- UITableView的属性和方法
- UITableView的使用方法和示例
- 计算机网络面试常考知识点
- Codeforces Gym 100203D Different vectors 想法题 + Hash
- 游标与事务结合使用,在游标内启用事务;判断数据类型不符合时执行下一条
- 解决虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
- hdu 1588 Gauss Fibonacci(矩阵乘法)
- UITableView的封装和类的交互2
- 去哪网实习总结:怎样配置数据库连接(JavaWeb)
- 继承和多态
- GYM 100285 E. The Emperor’s plan(组合数学+dp)
- 黑马程序员----泛型(Generic)
- hdoj1950Bridging signals(最长上升子序列)
- 《數據結構與算法分析:C語言描述》習題2.13c代碼及自己的想法
- 项视图类的自定义委托之文字省略
- 关于Android长按出现复制粘贴栏在顶部占位问题解决方法