首页 > 代码库 > iOS中表格(UITableView)嵌套表格的简单实现

iOS中表格(UITableView)嵌套表格的简单实现

iOS中表格(UITableView)嵌套表格的简单实现

首先说一下思路:我们在一个控制器里面定义2个tableview,一个作为被嵌套的rootTable,一个作为嵌套的表格tableView1,那我们要实现UITableViewDelegate,UITableViewDataSource,的代理的时候,该怎么区分呢?其实很简单,有两种方法,一个是给定义的2个tableview设置tag值,另一个是直接写出来tableView == rootTable时实现他得代理,否则就实现tableView1的代理方法。

测试环境 Xcode6.1
Demo的下载地址:


下面是实现的代码:

ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
    UITableView * rootTable;
    UITableView * tableView1;
    NSMutableArray * ChildArr;
    //NSMutableArray * ChildArr1;
    //NSMutableArray * ChildArr2;
}
@end
ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self initView];
    ChildArr = [[NSMutableArray alloc]initWithObjects:@"苹果",@"栗子",@"香蕉",@"菠萝",@"桃子", @"荔枝",nil];
    self.navigationItem.title = @"TwoTableView";
    
}

-(void)initView
{
    rootTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 65, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped];
    rootTable.delegate = self;
    rootTable.dataSource = self;
    [self.view addSubview:rootTable];
    
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == rootTable)
    {
        if (indexPath.row == 0)
        {
            return [ChildArr count]*44;
        }else
        {
           return 70;
        }
    }else
    {
        return 44;
    }
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView == rootTable)
    {
        return 5;
    }else
    {
        return 1;
    }
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == rootTable)
    {
        return 4;
    }else
    {
        return [ChildArr count];
    }
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * cell = [[UITableViewCell alloc]init];
    if (tableView == rootTable)
    {
        if (indexPath.row == 0)
        {
             tableView1 = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, [ChildArr count]*44)];
             tableView1.delegate = self;
             tableView1.dataSource = self;
             tableView1.scrollEnabled = NO;
             [cell.contentView addSubview:tableView1];
        }else
        {
            cell.textLabel.text = @"rootTableView";
        }

        return cell;
    }else
    {
        cell.textLabel.text = [ChildArr objectAtIndex:indexPath.row];
        cell.backgroundColor = [UIColor yellowColor];
        return cell;
    }
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == rootTable)
    {
        NSLog(@"roottableView");
    }else
    {
        NSLog(@"苹果");
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


iOS中表格(UITableView)嵌套表格的简单实现