ipad как программно создавать несколько таблиц в одном представлении - PullRequest
2 голосов
/ 09 ноября 2011

Мне нужно создать приложение для iPad, в котором мне нужно показывать несколько таблиц (без сетки, только один столбец с несколькими строками) в одном представлении. это должно быть сделано программно, потому что в бэк-офисе кто-то собирается установить это количество таблиц.

у представления будет свиток, чтобы я мог видеть их все.

Можно ли это сделать правильно?

Может ли кто-нибудь предоставить мой код или ссылку на какой-нибудь учебник о том, как создать N таблиц в одном представлении, размещая их, когда я захочу.

Ответы [ 4 ]

2 голосов
/ 09 ноября 2011

Это абсолютно возможно.

Вероятно, самый простой способ сделать это - создать подкласс UITableView, чтобы каждый создаваемый вами TableView мог иметь уникальный обработчик для своего делегата и источника данных, ala:

DynamicTableView.h

@interface DynamicTableView : UITableView <UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray *items;
}

@end

DynamicTableView.m

#import "DynamicTableView.h"

@implementation DynamicTableView

-(id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
    if (self == [super initWithFrame:frame style:style]) {
        items = [[NSMutableArray alloc] initWithObjects:[NSString stringWithFormat:@"%i", [NSDate timeIntervalSinceReferenceDate]],
                 [NSString stringWithFormat:@"%i", [NSDate timeIntervalSinceReferenceDate]], nil];
    }

    return self;
}

-(void) dealloc {
    [items release];

    [super dealloc];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [items count];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [items objectAtIndex:indexPath.row];

    return cell;
}

@end

Это очень простая реализация, которая при инициализации заполняет свой источник данных (массив элементов) двумя временными метками.Использовать его так же просто, как что-то вроде:

for (int i = 0; i < 4; i++) {
    DynamicTableView *table = [[[DynamicTableView alloc] initWithFrame:CGRectMake(10, (i * 100) + 10, 200, 50) style:UITableViewStylePlain] autorelease];
    [table setDelegate:table];
    [table setDataSource:table];

    [self.view addSubview:table];
}

Изменить DynamicTableView, чтобы принимать любой источник данных, который вы хотите, и как он отображается.

Надеюсь, это поможет!

0 голосов
/ 12 июля 2012

Если вы помещаете, скажем, 2 таблицы в ваш viewController и ваши методы делегата и источника данных, найденные в одном и том же классе, то либо установите тег для вашего tableView, либо добавьте к ним выходы и каждую функцию делегата и источника данных, которую вы можете кодировать соответствующим образом в качестве ссылки вызывающей стороныможно найти в каждом методе (их можно увидеть как (UITableView *) tableView):

if (tableView == table1) или if (tableView.tag == 1) {} else {}

2) Создайте отдельный класс NSObject (скажем, TableClassSource) и установите его с помощью UITableViewDelegate и UITableViewDataSource и выполните все кодирование здесь.А в вашем ViewController создайте объект этого класса и установите для вашего делегата и источника данных таблицы этот объект

TableClassSource * obj = [[TableClassSource alloc] init];table1.dataSource = OBJ;table1.delegate = OBJ;

Вы можете создать метод в TableClassSource, например loadMethod, и вызывать его для повторной загрузки, если вам нужно обновлять таблицу каждый раз

или для получения дополнительной информации вы можете увидеть и загрузить пример проекта из

Обработка более 1 таблицы в одном представлении - часть-1

Обработка более 1 таблицы в одном представлении - часть-2

0 голосов
/ 09 ноября 2011

Я надеюсь, что следующий код может стать для вас отправной точкой:

@interface MyController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, retain) UITableView *table1;
@property (nonatomic, retain) UITableView *table2;

@end

@implementation MyController

@synthesize table1 = _table1,
            table2 = _table2;

- (void)viewDidLoad {
    [super viewDidLoad];
    CGRect table1Rect = CGRectMake(0, 0, 200, 300);
    UITableView *table1 = [[UITableView alloc] initWithFrame:table1Rect style:UITableViewStyleGrouped];
    table1.delegate = self;
    table1.dataSource = self;
    [self.view addSubview:table1];
    self.table1 = table1;
    [table1 release];

    CGRect table2Rect = CGRectMake(200, 0, 200, 300);
    UITableView *table2 = [[UITableView alloc] initWithFrame:table2Rect style:UITableViewStyleGrouped];
    table2.delegate = self;
    table2.dataSource = self;
    [self.view addSubview:table2];
    self.table2 = table2;
    [table2 release];
}

- (void)viewDidUnload {
    self.table1 = nil;
    self.table2 = nil;
}

- (void)dealloc {
    self.table1 = nil;
    self.table2 = nil;
    [super dealloc];
}

@end
0 голосов
/ 09 ноября 2011

Из вашего описания я предполагаю, что вы хотите иметь произвольное количество таблиц, все из которых находятся в одном представлении, которое само прокручивается (так что вы прокручиваете вверх или вниз, чтобы добраться до всех таблиц). ). Это крайне нежелательно в iOS, так как табличное представление является подклассом прокручиваемого представления, и у вас будут серьезные проблемы с правильной прокруткой отдельных таблиц вместе с «основным» прокручиваемым представлением.

Предполагая, что это то, что вы пытаетесь сделать, вам было бы намного лучше, если бы вы использовали одно табличное представление, разбитое на разделы. Вот хороший учебник , который показывает, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...