#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