在我的应用程序中,我想在单个ViewController
. 问题是如何UITableViewDelegate
单独使用方法。例如; 我可以通过标记cellForRowAtIndexPath
为每个单独使用方法。UITableView
但是,我不知道对每个 tableview 不同地使用numberOfRowsInSection
ornumberOfSectionsInTableView
方法。是否可以?
8 回答
对于数据源和委托方法中具有条件的所有表,仅使用一种数据源和委托方法。
- (NSInteger)numberOfRowsInSection:(NSInteger)section;
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section;
{
if (tableView==tabl1) {
return [arr1 count];
}
if (tableView==tabl2) {
return [arr2 count];
}
if (tableView==tabl3) {
return [arr3 count];
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier ];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.backgroundColor=[UIColor clearColor];
}
if (tableView==tabl1) {
cell.textLabel.text = [arr1 objectAtIndex:indexPath.row];
}
if (tableView==tabl2) {
cell.textLabel.text = [arr2 objectAtIndex:indexPath.row];
}
if (tableView==tabl3) {
cell.textLabel.text = [arr3 objectAtIndex:indexPath.row];
}
return cell;
}
在YourViewController.h中创建3 个UITableView
变量:
YourViewController : UIViewController
{
UITableView* tableView1;
UITableView* tableView2;
UITableView* tableView3;
}
你的视图控制器.m:
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == tableView1)
{
//Your code
}
if (tableView == tableView2)
{
//Your code
}
if (tableView == tableView3)
{
//Your code
}
}
您不应该使用单独的委托方法。相反,在每个委托方法中cellForRowAtIndexPath
,您应该将您的表标识为
if(tableview == TableView1)
{
}
else if(tableview == TableView2)
{
}
else
{
}
等等 。这是正确的方法,因为您操作的任何表都将具有通用的委托方法,然后您只需要指定表的名称。
当然:
所有 tableview 委托函数都将 tableView 作为第一个参数,因此您所要做的就是跟踪三个表视图,并在每个委托函数中检查委托调用是针对哪个表视图:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == firstTableView) {
...
}
else if (tableView == secondTableView) {
...
}
else if (tableView == thirdTableView) {
...
}
}
您还可以创建三个表格视图控制器类(以防每个表格视图在其单元格显示逻辑中涉及一些复杂性)。将它们添加为[self addChildViewController:(Your Controller Class)
,然后添加下一行[self.view addSubview:(Your Controller Class' view)]
,并将视图调整为您要设置的框架。
在所有委托和数据源方法中,第一个参数是对 tableview 对象的引用。所以你总是可以区分你的tableviews。
在ViewController.h
{
NSArray *arr1;
NSArray *arr2;
NSArray *arr3;
}
@property (nonatomic, retain) IBOutlet UITableView *tbl1;
@property (nonatomic, retain) IBOutlet UITableView *tbl2;
@property (nonatomic, retain) IBOutlet UITableView *tbl3;
不要忘记将此属性与XIB's
UITableView 实例连接起来。
在ViewController.m
@synthesize tbl1, tbl2, tbl3;
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
if (tableView == tbl1)
return [arr1 count];
if (tableView == tbl2)
return [arr2 count];
if (tableView == tbl3)
return [arr3 count];
return 0;
}
我希望我对你有所帮助。