Как я могу реализовать несколько uitableview в одном представлении?

#iphone

#iPhone

Вопрос:

Кто-нибудь может сказать мне, как я могу показать несколько UITableViews в одном представлении?

Комментарии:

1. если кто-то не знает, пожалуйста, не снижайте репутацию. потому что я в такой ситуации, что мне нужно реализовать два uitableview в одном представлении. может быть, мой вопрос неверен, но моя потребность верна.

2. вы хотите, чтобы оба табличных представления отображались вместе или по одному (одно скрытое и одно видимое) ..?

3. два табличных представления означают? вы имели в виду одно и то же табличное представление с разными данными или две разные таблицы, которые отображаются вместе с разными данными?

4. Надеюсь, это поможет, но я не проголосовал против вас…

5. сделайте одно: отредактируйте свой вопрос и объясните свою проблему более открыто, чтобы мы могли вам помочь.

Ответ №1:

1) Нарисуйте разные табличные представления, используя разные фреймы / перетаскивание табличных представлений разных размеров, если используется XiB.

2) Как обычно соответствует протоколам табличного представления и предоставляет реализацию для методов делегирования / источника данных

3) В методах делегата / источника данных определите, для какого табличного представления оно было вызвано, используя объект табличного представления. например:

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

Комментарии:

1. Сделайте это. Это означает, что у вас есть «tableView1» и «tableView2», настроенные как ivar или, возможно, как @properties. Наличие одного набора методов делегирования / источника данных, которые выбирают, какими данными отвечать, поможет вам сохранить здравый смысл, чем пытаться создавать отдельные классы управления таблицами.

Ответ №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];
 

Ответ №3:

вам нужно будет реализовать несколько источников данных 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, который содержит ваши табличные представления:

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)
    ...
    }
 

Вы даже можете изменить источник gata для каждого TableView в любое время: просто установите новый источник данных и делегируйте ему. GL amp; HF