在视图控制器中使用多个表视图时使用委托方法

时间:2013-02-20 11:13:39

标签: iphone ios objective-c uitableview

在我的应用中,我想在一个ViewController中使用3个表格视图。问题是如何单独使用UITableViewDelegate方法。例如;我可以通过标记为每个cellForRowAtIndexPath分别使用UITableView方法。但是,我不知道对每个tableview使用numberOfRowsInSectionnumberOfSectionsInTableView方法的方式不同。有可能吗?

8 个答案:

答案 0 :(得分:4)

对于数据源和委托方法中具有条件的所有表,只使用一个dataSource和Delegate方法。

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

答案 1 :(得分:4)

YourViewController.h

中制作3个UITableView变量
YourViewController : UIViewController
{
    UITableView* tableView1;
    UITableView* tableView2;
    UITableView* tableView3;
}

<强> YourViewController.m:

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{

    if (tableView == tableView1)
    {
        //Your code
    }
    if (tableView == tableView2)
    {
        //Your code
    }
    if (tableView == tableView3)
    {
        //Your code
    }
}

答案 2 :(得分:2)

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

if(tableview == TableView1) 
{ 

}
else if(tableview == TableView2)
{

}
else
{

}

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

答案 3 :(得分:1)

当然:

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView == firstTableView) {
    ...
    }
    else if (tableView == secondTableView) {
    ...
    }
    else if (tableView == thirdTableView) {
    ...
    }
}

答案 4 :(得分:1)

答案 5 :(得分:0)

在所有委托和数据源方法中,第一个参数是对tableview对象的引用。因此,您可以随时区分您的表格视图。

答案 6 :(得分: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'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;
}

我希望我帮助过你。

答案 7 :(得分:0)

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