如何在单个视图中实现多个uitableview?

时间:2011-11-02 13:04:29

标签: iphone

有谁能告诉我如何在一个视图中显示多个UITableView?

3 个答案:

答案 0 :(得分:4)

1)使用不同的帧绘制不同的表视图/拖放不同大小的表视图(如果使用XiB)。

2)像往常一样遵守表视图协议,并为委托/数据源方法提供实现

3)在委托/数据源方法中,使用表视图的对象决定调用哪个表视图。例如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
    if(tableView == tableView1)
{
        //Do this
}
else if(tableView == tableView2)
{
        //Do that
}
}

答案 1 :(得分:2)

要在单个视图中显示多个UITableView,您可以实例化多个UITableView并将它们添加为子视图,如下所示:

UITableView *tb1 = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 200, 100) style:UITableViewStylePlain];
UITableView *tb2 = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, 200, 100) style:UITableViewStylePlain];
UITableView *tb3 = [[UITableView alloc] initWithFrame:CGRectMake(0, 200, 200, 100) style:UITableViewStylePlain];

[self.view addSubview:tb1];
[self.view addSubview:tb2];
[self.view addSubview:tb3];

[tb1 release];
[tb2 release];
[tb3 release];

答案 2 :(得分:1)

您需要实现多个tableView数据源。 为每个表视图创建新的NSObject类:

DataSourceOne.h中的

#import <Foundation/Foundation.h>


    @interface DataSourceOne : NSObject <UITableViewDataSource, UITableViewDelegate> {
         NSMutableArray *data;
    }
    @property (nonatomic, retain) NSMutableArray *data;

    - (id)initWithData:(NSMutableArray *)d;

    @end

然后,在每个* .m文件的数据源类中实现每个表视图数据的源。 然后,在ViewController类中,它包含您的表Views:

ViewController.h:

#import "DataSourceOne.h"
#import "DataSourceTwo.h"
#import "DataSourceThree.h"


@interface SearchView : UIViewController {
    DataSourceOne *ds1;
    DataSourceTwo *ds2;
    DataSourceThree *ds3; 
UITableView *table1;
UITableView *table2;
UITableView *table3;
}
@property (nonatomic, retain) IBOutlet UITableView *table1;
@property (nonatomic, retain) IBOutlet UITableView *table2;
@property (nonatomic, retain) IBOutlet UITableView *table3;
@end

最后,将数据源和代理设置为每个UITableView:

ViewController.m:


    - (void)viewDidLoad
    {
    ds1 = [[DataSourceOne alloc] init];
    [table1 setDataSource:ds1];   //for data source
    [table1 setDelegate:da1];     //for callbacks (didSekectRowAtIndexPath)
    ...
    }

您甚至可以随时更改每个tableView的gata源:只需设置新的数据源并删除它。 GL&安培; HF

相关问题