Несколько UITableViews на одном UIView - PullRequest
10 голосов
/ 13 сентября 2009

Мне нужно иметь два UITableViews на одном UIView. Я могу заставить его работать с одним, вот код:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [contentOne count];  // sets row count to number of items in array
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    NSString *firstValue = [[NSString alloc] initWithFormat: @"Row %i% %", indexPath.row+1 ];
    NSString *secondValue = [contentOne objectAtIndex:indexPath.row];

    NSString *cellValue = [firstValue stringByAppendingString: secondValue]; // appends two strings

    [cell.textLabel setText:cellValue];



    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

}

Я пробовал несколько разных методов. Кто-нибудь? Если бы я мог назвать каждое UITableView другим именем, которое должно делать это, но это не позволит мне отредактировать tableView к чему-либо другому без сбоев.

Ответы [ 3 ]

28 голосов
/ 13 сентября 2009

, поэтому вам нужен какой-то способ различения двух tableView - вы можете либо установить для свойства "tag" разные значения, либо иметь свойство в вашем контроллере представления, которое указывает на каждое представление

@property (nonatomic, retain) IBOutlet UITableView *tableView1;
@property (nonatomic, retain) IBOutlet UITableView *tableView2;

затем подключите их к каждому представлению в конструкторе интерфейса ...

тогда в ваших методах просмотра контроллера вы можете сделать

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if (tableView == self.tableView1) {
        return 37;
    } else if (tableView == self.tableView2) {
        return 19;
    } else {
        // shouldn't get here, use an assert to check for this if you'd like
    }
}
14 голосов
/ 13 сентября 2009

Вероятно, самый простой способ реализовать это - иметь два класса делегата и источника данных, по одному для каждого табличного представления. Это уменьшило бы число вхождений if (tableview == tableview1) в коде контроллера представления.

5 голосов
/ 05 сентября 2011

Этот пример кода может помочь вам ...

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