- 浏览: 86981 次
- 性别:
- 来自: 成都
最新评论
.h
//
// PublicTableView.h
// JointCrm
//
// Created by Mac on 15/10/27.
// Copyright © 2015年 Mac. All rights reserved.
//
#import <UIKit/UIKit.h>
typedef void(^TableBlock)(UITableView *tableView,NSIndexPath *indexPath);
@interface PublicTableView : UITableView
/**
* 定义一个公共的TableView,然后可以在使用tableview的地方使用
*
* @param frame UITableView的frame
* @param style UITableViewStyle
* @param className cell Class
* @param mcellMethod cell调用的方法
* @param isUserNib 是否使用nib
*
* @return cell
*/
-(instancetype)initWithFrame:(CGRect)frame
style:(UITableViewStyle)style
cellWithClassName:(NSString *)className
cellWithMethod:(NSString *)cellMethod
cellWithIsUserNib:(BOOL)isUserNib;
// 数据列表
@property (nonatomic, strong) NSMutableArray *dataList;
@property (nonatomic, copy) TableBlock tableBlock;
// 数据行选择时所触发的block
- (void)blockWithCellSelectRowAtIndexPath:(TableBlock)tableBlock;
@end
.m
//
// PublicTableView.m
// JointCrm
//
// Created by Mac on 15/10/27.
// Copyright © 2015年 Mac. All rights reserved.
//
#import "PublicTableView.h"
#import <objc/objc-runtime.h>
@interface PublicTableView()<UITableViewDataSource,UITableViewDelegate>{
NSString *cellClassName;
NSString *cellInvokMethod;
}
@end
@implementation PublicTableView
-(instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style cellWithClassName:(NSString *)className cellWithMethod:(NSString *)cellMethod cellWithIsUserNib:(BOOL)isUserNib{
if (self = [super initWithFrame:frame style:style]) {
self.delegate = self;
self.dataSource = self;
cellClassName = className;
cellInvokMethod = cellMethod;
if (isUserNib) {
[self registerNib:[UINib nibWithNibName:className bundle:nil] forCellReuseIdentifier:className];
}else{
[self registerClass:NSClassFromString(className) forCellReuseIdentifier:className];
}
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellClassName forIndexPath:indexPath];
if ([cell respondsToSelector:NSSelectorFromString(cellInvokMethod)]) {
id value = self.dataList[indexPath.row];
[self sendMsg:cell method:NSSelectorFromString(cellInvokMethod) value1:value value2:indexPath];
}else{
DLog(@"%@",@"cell未实现该方法");
}
return nil;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
self.tableBlock(tableView,indexPath);
}
-(void)blockWithCellSelectRowAtIndexPath:(TableBlock)tableBlock{
self.tableBlock = tableBlock;
}
- (void)sendMsg:(id)rever method:(SEL)method value1:(id)value1 value2:(id)value2{
int (*action)(id, SEL, id, id) = (int (*)(id, SEL, id, id)) objc_msgSend;
action(rever, method, value1, value2);
}
@end
使用:
PublicTableView *publicTableView = [[PublicTableView alloc] initWithFrame:self.view.frame
style:UITableViewStylePlain
cellWithClassName:@"MyCell"
cellWithMethod:@"cellConfig:"
cellWithIsUserNib:YES];
[self.view addSubview:publicTableView];
publicTableView.dataList = dataList;
[publicTableView blockWithCellSelectRowAtIndexPath:^(UITableView *tableView, NSIndexPath *indexPath) {
}];
注意:这里只需要把每个cell的类名,及配置数据的方法传进去就可以了
//
// PublicTableView.h
// JointCrm
//
// Created by Mac on 15/10/27.
// Copyright © 2015年 Mac. All rights reserved.
//
#import <UIKit/UIKit.h>
typedef void(^TableBlock)(UITableView *tableView,NSIndexPath *indexPath);
@interface PublicTableView : UITableView
/**
* 定义一个公共的TableView,然后可以在使用tableview的地方使用
*
* @param frame UITableView的frame
* @param style UITableViewStyle
* @param className cell Class
* @param mcellMethod cell调用的方法
* @param isUserNib 是否使用nib
*
* @return cell
*/
-(instancetype)initWithFrame:(CGRect)frame
style:(UITableViewStyle)style
cellWithClassName:(NSString *)className
cellWithMethod:(NSString *)cellMethod
cellWithIsUserNib:(BOOL)isUserNib;
// 数据列表
@property (nonatomic, strong) NSMutableArray *dataList;
@property (nonatomic, copy) TableBlock tableBlock;
// 数据行选择时所触发的block
- (void)blockWithCellSelectRowAtIndexPath:(TableBlock)tableBlock;
@end
.m
//
// PublicTableView.m
// JointCrm
//
// Created by Mac on 15/10/27.
// Copyright © 2015年 Mac. All rights reserved.
//
#import "PublicTableView.h"
#import <objc/objc-runtime.h>
@interface PublicTableView()<UITableViewDataSource,UITableViewDelegate>{
NSString *cellClassName;
NSString *cellInvokMethod;
}
@end
@implementation PublicTableView
-(instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style cellWithClassName:(NSString *)className cellWithMethod:(NSString *)cellMethod cellWithIsUserNib:(BOOL)isUserNib{
if (self = [super initWithFrame:frame style:style]) {
self.delegate = self;
self.dataSource = self;
cellClassName = className;
cellInvokMethod = cellMethod;
if (isUserNib) {
[self registerNib:[UINib nibWithNibName:className bundle:nil] forCellReuseIdentifier:className];
}else{
[self registerClass:NSClassFromString(className) forCellReuseIdentifier:className];
}
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellClassName forIndexPath:indexPath];
if ([cell respondsToSelector:NSSelectorFromString(cellInvokMethod)]) {
id value = self.dataList[indexPath.row];
[self sendMsg:cell method:NSSelectorFromString(cellInvokMethod) value1:value value2:indexPath];
}else{
DLog(@"%@",@"cell未实现该方法");
}
return nil;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
self.tableBlock(tableView,indexPath);
}
-(void)blockWithCellSelectRowAtIndexPath:(TableBlock)tableBlock{
self.tableBlock = tableBlock;
}
- (void)sendMsg:(id)rever method:(SEL)method value1:(id)value1 value2:(id)value2{
int (*action)(id, SEL, id, id) = (int (*)(id, SEL, id, id)) objc_msgSend;
action(rever, method, value1, value2);
}
@end
使用:
PublicTableView *publicTableView = [[PublicTableView alloc] initWithFrame:self.view.frame
style:UITableViewStylePlain
cellWithClassName:@"MyCell"
cellWithMethod:@"cellConfig:"
cellWithIsUserNib:YES];
[self.view addSubview:publicTableView];
publicTableView.dataList = dataList;
[publicTableView blockWithCellSelectRowAtIndexPath:^(UITableView *tableView, NSIndexPath *indexPath) {
}];
注意:这里只需要把每个cell的类名,及配置数据的方法传进去就可以了
发表评论
-
block语法
2015-12-11 10:34 537How Do I Declare A Block in Obj ... -
禁止WebView长按事件
2015-11-04 16:05 1182在webViewDidFinishLoad调用: - (voi ... -
记录一些不错的文章
2015-10-09 20:04 613好久没有写ios了,这篇文章主要是记录一些看到的不错的文章: ... -
封装录音View
2015-06-26 16:13 620使用方法: 直接把XHRecrodView添加到control ... -
AFNetWorking请求WebService
2015-06-15 17:22 824.h #import <Foundation/Foun ... -
压缩图片,如果图片大于100kb,就循环压缩
2015-06-02 10:37 2284// 压缩图片,如果图片大于100kb,就循环压缩 + (NS ... -
weakSelf
2015-05-11 14:44 558快速的定义一个weakSelf 当然是用于block里面啦 ... -
UINavigationItem 位置问题
2015-05-06 14:09 1028解决ios7 UINavigationItem 位置偏移问题 ... -
ios Icon及启动图集合
2015-05-04 09:13 686做icon和启动图按这个尺寸来 -
把图片压缩到指定大小(kb)
2015-01-19 16:32 5086UIImage *image=[UIImage imageNa ... -
获取当前时间属于该月的第几周
2015-01-06 15:04 1114+(NSInteger) indexWeekOfDateInM ... -
iOS开发的一些奇巧淫技
2014-12-31 11:13 769iOS开发的一些奇巧淫技 http://www.coco ... -
iOS中使用block进行网络请求回调
2014-06-23 16:26 5536转自: http://www.tuicool.com/arti ... -
ios程序异常crash捕获与拦截
2014-06-06 22:09 590转:http://www.sharejs.com/codes/ ... -
设置TabBar选中与未选中图片
2014-04-29 18:07 717-(void)settingTabbarController{ ... -
自定义的NavigationBar,我觉得还不错
2014-04-28 18:03 596地址1:http://code.cocoachina.com ... -
UITableView点击展开cell
2014-04-25 15:14 103861.定义控制cell的两个变量 //最近打开的ind ... -
分享一个非常好的东西
2014-04-09 17:44 721http://makeappicon.com/ 传一个10 ... -
IOS 基于APNS消息推送原理与实现(JAVA后台)
2014-04-09 17:30 993转:http://cshbbrain.iteye.com/bl ... -
ios开发申请发布证书和发布应用到app store
2014-03-21 11:03 7841.http://www.360doc.com/content ...
相关推荐
这个“ios-TableView delegate dataSource封装.zip”文件显然提供了一个关于如何封装这两个协议的方法,以便在多个UITableView实例中重用代码,避免了每次创建新的表格视图时都需要手动复制和粘贴相同的数据源和代理...
2. **设置DataSource和Delegate**:每个TableView都需要自己的DataSource和Delegate,这样它们才能正确显示数据和响应用户交互。由于所有TableView都属于同一个控制器,我们可以让控制器同时担任这些角色。 ```...
首先,我们需要创建一个扩展,这个扩展将添加一个方法到UITableView类,该方法用于设置Delegate和DataSource。这个方法应该返回self,以便可以链式调用其他方法: ```swift extension UITableView { func ...
在上述代码中,我们首先定义了行数,然后为每一行创建并配置UITableViewCell。当用户点击单元格时,会触发`didSelectRowAt`方法。 压缩包中的文件"RTImageLoader副本"可能是一个用于加载图片的库或组件。在...
每个TableView都有自己的DataSource和Delegate,它们分别负责提供数据和处理与用户交互的事件。为了实现联动,我们需要在DataSource中添加逻辑,使得当一个TableView的数据发生变化时,能够同步更新到另一个...
每个数组元素都将对应TableView中的一个单元格。 4. **实现UITableViewDataSource协议** 必须实现以下方法: - `numberOfSectionsInTableView:`:返回TableView的section数量。 - `tableView:...
接着,我们需要为UITableView指定DataSource和Delegate,这两个协议定义了UITableView如何获取和显示数据,以及处理用户交互。 DataSource协议主要有三个方法: 1. numberOfSectionsInTableView: 返回表格中的...
`numberOfSections(in:)`返回tableView的section数量,`tableView(_:numberOfRowsInSection:)`返回指定section内的行数,而`tableView(_:cellForRowAt:)`则用于为每一行创建并配置UITableViewCell。 在自定义...
- 在子类中初始化并配置内部的纵向TableView,设置其DataSource和Delegate为自己。 二、纵向TableView 1. 纵向TableView是每个横向TableViewCell内的子视图,它负责展示每一列中的数据子项。 - 设置内部...
- 在UITableViewCell的子类中设置UICollectionView的frame、dataSource和delegate为当前的UITableViewCell实例。 3. **设置UICollectionView的布局** - 根据需求定制UICollectionViewFlowLayout,如设置列数、...
然后在`tableView(_:numberOfRowsInSection:)`返回行数,`tableView(_:cellForRowAt:)`中设置每个cell的内容。 5. 响应点击事件:如果需要对tableView中的某一部分进行交互,例如点击跳转到其他页面,可以在`...
例如,你可以定义一个新的方法来返回每行有多少列,然后在`tableView:cellForRowAtIndexPath:`中根据列数动态调整Cell的宽度。 5. **使用第三方库**:如题目中提到的Xenofex-MultiColumnTableViewForiOS,这是一个...
- 配置TableView的数据源和代理,通过连线或者在代码中设置`tableView.dataSource = self`和`tableView.delegate = self`。 2. **数据源方法**: - `numberOfSections(in tableView:)`:返回TableView的section...
每个TableView由Sections(分区)和Rows(行)组成,可以与DataSource(数据源)和Delegate(代理)协议配合,实现数据加载和用户交互。 在该示例中,描述提到底部是一个ScrollView,这是整个界面的容器。...
`numberOfRowsInSection(_:)`返回特定区(section)内的行数,`tableView(_:cellForRowAt:)`则负责为每个索引路径创建并返回一个单元格。在这个方法中,你将根据数据模型填充单元格的各个部分。 `...
LightTableView 是一个专门为 iOS 开发者设计的轻量级组件,它主要解决了在使用 UITableView 时,delegate 和 dataSource 的职责过于混杂的问题。这个库的目标是通过分离 delegate、dataSource 和 cell,来简化代码...
它基于数据源(DataSource)和委托(Delegate)的设计模式,由数据源提供数据,委托处理用户交互。 ### 数据重用机制 - **Cell重用**:为了优化性能,Tableview采用了一种称为“cell重用”的机制。当cell离开屏幕...
2. 数据源方法:在数据源协议的实现中,我们需要返回正确的单元格数量(`- tableView:numberOfRowsInSection:`),并为每个单元格提供内容(`- tableView:cellForRowAt:`)。在这里,我们可以根据数据源中的数据来...
DataSource必须实现的方法包括`numberOfSectionsInTableView:`、`tableView:numberOfRowsInSection:`和`tableView:cellForRowAtIndexPath:`,以定义表格的结构和每个单元格的内容。 2. **Cell自定义**: `...