1

在我的应用程序中,我想在单个ViewController. 问题是如何UITableViewDelegate单独使用方法。例如; 我可以通过标记cellForRowAtIndexPath为每个单独使用方法。UITableView但是,我不知道对每个 tableview 不同地使用numberOfRowsInSectionornumberOfSectionsInTableView方法。是否可以?

4

8 回答 8

4

对于数据源和委托方法中具有条件的所有表,仅使用一种数据源和委托方法。

       - (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;
      }
于 2013-02-20T11:20:47.100 回答
4

在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
    }
}
于 2013-02-20T11:21:36.747 回答
2

您不应该使用单独的委托方法。相反,在每个委托方法中cellForRowAtIndexPath,您应该将您的表标识为

if(tableview == TableView1) 
{ 

}
else if(tableview == TableView2)
{

}
else
{

}

等等 。这是正确的方法,因为您操作的任何表都将具有通用的委托方法,然后您只需要指定表的名称。

于 2013-02-20T11:18:11.620 回答
1

当然:

所有 tableview 委托函数都将 tableView 作为第一个参数,因此您所要做的就是跟踪三个表视图,并在每个委托函数中检查委托调用是针对哪个表视图:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView == firstTableView) {
    ...
    }
    else if (tableView == secondTableView) {
    ...
    }
    else if (tableView == thirdTableView) {
    ...
    }
}
于 2013-02-20T11:18:44.907 回答
1

您还可以创建三个表格视图控制器类(以防每个表格视图在其单元格显示逻辑中涉及一些复杂性)。将它们添加为[self addChildViewController:(Your Controller Class),然后添加下一行[self.view addSubview:(Your Controller Class' view)],并将视图调整为您要设置的框架。

于 2013-02-20T11:29:28.113 回答
1

请参阅本教程可能对您有所帮助 http://www.edumobile.org/iphone/ipad-development/a-tableview-based-menu-for-ipad/

于 2013-02-20T12:01:57.113 回答
0

在所有委托和数据源方法中,第一个参数是对 tableview 对象的引用。所以你总是可以区分你的tableviews。

于 2013-02-20T11:19:19.263 回答
0

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'sUITableView 实例连接起来。

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;
}

我希望我对你有所帮助。

于 2013-02-20T11:29:15.083 回答