单个类中的多个UITableView

时间:2011-06-09 07:03:42

标签: iphone ipad uitableview

在单个UiView控制器类中,我添加了3个UITableView。

UITableView *ChaptersTableView;

UITableView *SubChaptersTableView;

UITableView *SubTopics1TableView;

现在,我在ViewDidLoad类中初始化了这些TableView的&致电代表和这些表视图上的数据源方法。

ChaptersTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];
ChaptersTableView.delegate=self;
ChaptersTableView.dataSource=self;

SubChaptersTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];
SubChaptersTableView.delegate=self;
SubChaptersTableView.dataSource=self;



SubTopics1TableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];
SubTopics1TableView.delegate=self;
SubTopics1TableView.dataSource=self;

我希望有不同的内容和不同表视图的行的高度。例如。 TableView1的单元格高度为20,TableView2的单元格高度为40& TableView3的单元格高度为60。

那么我该如何定制这些代表&数据源方法取决于它们被调用的tableView?

感谢。

4 个答案:

答案 0 :(得分:2)

委托方法返回tableview对象。因此,在创建时,您可以像这样标记tableviews。 SubTopics1TableView.tag = 0, SubChaptersTableView.tag = 1等。

在您的委托方法中,检查标记并配置tableviews。 例如

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(tableview.tag == 0)
// Customise this tableview
}

要更改单元格的外观,可以使用委托方法:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

要更改可以使用的行的高度:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

答案 1 :(得分:1)

看看这段代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
{
static NSString *cellIden = nil;
UITableViewCell *cell = nil;
    if(  [mTableView1 isEqual:tableView ])
    {
        cellIden = @"Cell1";
        cell = [tableView dequeueReusableCellWithIdentifier:cellIden];
        if (cell == nil) 
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIden];
        }
        cell.textLabel.text = [mList objectAtIndex:indexPath.row];
    }

    if(  [mTableView2 isEqual:tableView ])
    {
        cellIden = @"Cell2";
        cell = [tableView dequeueReusableCellWithIdentifier:cellIden];
        if (cell == nil) 
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIden];
        }
        cell.textLabel.text = [mArray objectAtIndex:indexPath.row];
    }

return cell;
 }

答案 2 :(得分:0)

为每个表分配标签....

-(CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
 if(tableView.tag==1)
     return 20;
 else if(tableView.tag==2)
     return 40;
 else if(tableView.tag==3)
     return 60;
}

答案 3 :(得分:0)

要修改单元格的高度,您必须在委托类中实现tableView:heightForRowAtIndexPath:,而不是数据源。您可以将同一个委托附加到所有三个表,并以这种方式实现该方法:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
    if ([tableView kindOfClass:[ChaptersTableView class]])
        return 20;
    else if ([tableView kindOfClass:[SubChaptersTableView class]])
        return 40;
    else if ([tableView kindOfClass:[SubTopics1TableView class]])
        return 60;
    else return 44;
}

如果您计划使用具有不同但唯一的类的不同表,则此解决方案将起作用。如果您计划区分实现相同类的两个不同表的单元格高度(例如tableView1 == tableView2 = Class1类),则应设置不同的标志在该类的实现和测试该标志的值。

请告诉我这是否有帮助