Несколько пользовательских строк UITableView?

Я много искал, но не нашел ничего полезного, связанного с несколькими пользовательскими строками, мне нужно создать таблицу настроек для моего приложения, в которой мне нужно загрузить строки из файлов XIB, например:

ROW 1 = >> XIB 1.
ROW 2 = >> XIB 2.
ROW 3 = >> XIB 3.
ROW 4 = >> XIB 4.

Мой нынешний код:

<code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell=nil;
    //We use CellType1 xib for certain rows
    if(indexPath.row==0){
        static NSString *CellIdentifier = @"ACell";
        cell =(ACell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell==nil){
            NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"ACell" owner:self options:nil];
            cell = (ACell *)[nib objectAtIndex:0];
        }
        //Custom cell with whatever
        //[cell.customLabelA setText:@"myText"]
    }
    //We use CellType2 xib for other rows
    else{
        static NSString *CellIdentifier = @"BCell";
        cell =(BCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell==nil){
            NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"BCell" owner:self options:nil];
            cell = (BCell *)[nib objectAtIndex:0];
        }
        //Custom cell with whatever
        //[cell.customLabelB setText:@"myText"]
    }

    return cell;
}
</code>

Ответы на вопрос(2)

посмотрите документация здесь. Чтобы распространить это на несколько пользовательских xib, вы можете создать каждую ячейку таблицы в отдельном xib, присвоить ей уникальный идентификатор ячейки, установить контроллер представления таблицы в качестве владельца файла и подключить каждую ячейку к определенному вами выходу настраиваемой ячейки (в документы, они используютtvCell как этот выход). Тогда в вашем-tableView:cellForRowAtIndexPath: метод, вы можете загрузить правильную XIB (или удалить из очереди правильную повторно используемую ячейку), проверив, для какой строки вы предоставляете ячейку. Например

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier1 = @"MyIdentifier1";
    static NSString *MyIdentifier2 = @"MyIdentifier2";
    static NSString *MyIdentifier3 = @"MyIdentifier3";
    static NSString *MyIdentifier4 = @"MyIdentifier4";

    NSUInteger row = indexPath.row

    UITableViewCell *cell = nil;

    if (row == 0) {
        cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer1];
        if (nil == cell) {
            [[NSBundle mainBundle] loadNibNamed:@"MyTableCell1" owner:self options:nil];
            cell = self.tvCell;
            self.tvCell = nil;
        }
    }
    else if (row == 1) {
        cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer2];
        if (nil == cell) {
            [[NSBundle mainBundle] loadNibNamed:@"MyTableCell2" owner:self options:nil];
            cell = self.tvCell;
            self.tvCell = nil;
        }
    }
    else if (row == 2) {
        cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer3];
        if (nil == cell) {
            [[NSBundle mainBundle] loadNibNamed:@"MyTableCell3" owner:self options:nil];
            cell = self.tvCell;
            self.tvCell = nil;
        }
    }
    else if (row == 4) {
        cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer4];
        if (nil == cell) {
            [[NSBundle mainBundle] loadNibNamed:@"MyTableCell4" owner:self options:nil];
            cell = self.tvCell;
            self.tvCell = nil;
        }
    }
    // etc.

    // Do any other custom set up for your cell

    return cell;

}
 Luke Irvin15 авг. 2013 г., 01:06
Этот метод не работает для меня. Я получаю 'UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath:' Мысли? У меня есть свой ViewController, связанный с каждой ячейкой, и собственный IBOutlet для каждой ячейки, созданный и подключенный к ячейке.
Решение Вопроса

(.h и .m), столько, сколько у вас есть файлы xib:
Так, например, вы можете использовать CellType1 и CellType2.
CellType1.h будет выглядеть примерно та

#import <UIKit/UIKit.h>
@interface CellType1 : UITableViewCell

@property(nonatomic,strong) IBOutlet UILabel *customLabel;

@end

После создания файлов xib вы можете использовать тип представления по умолчанию, но затем просто удалите автоматически созданное представление, замените его на UITableViewCell и измените класс на CellType1. Сделайте то же самое для CellType2.

Затем в вашем tableViewController напишите cellForRow следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell=nil;
//We use CellType1 xib for certain rows
if(indexPath.row==<whatever you want>){
     static NSString *CellIdentifier = @"CellType1";
     cell =(CellType1*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if(cell==nil){
        NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"CellType1" owner:self options:nil];
        cell = (CellType1 *)[nib objectAtIndex:0];
      }
      //Custom cell with whatever
      [cell.customLabel setText:@"myText"]
}
//We use CellType2 xib for other rows
else{
    static NSString *CellIdentifier = @"CellType2";
    cell =(CellType2*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if(cell==nil){
        NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"CellType2" owner:self options:nil];
        cell = (CellType2 *)[nib objectAtIndex:0];
      }
      //Custom cell with whatever
      [cell.customLabel setText:@"myText"]
}

return cell;
}
 JP Hribovsek05 мая 2012 г., 22:43
Просто удалите это представление и добавьте UITableViewCell, затем измените тип с UITableViewCell на WhwhatCustomCell
 JP Hribovsek05 мая 2012 г., 21:35
Вы говорите, что хотите использовать несколько Xib, я предполагаю, что xib1 для строки n1, xib2 для строки n2 и т. Д. Итак, оператор if / else проверяет индекс строки, и в зависимости от того, чего вы хотите достичь, вы выбираете правильный xib в правильном индексе строки
 Mateus05 мая 2012 г., 22:18
Главный вид моего XIB я должен затем изменить для UITableViewCells или просто изменить размер представления?
 Mateus05 мая 2012 г., 21:05
Что ты имеешь в виду под "<что хочешь>"
 Mateus05 мая 2012 г., 22:45
Ваш код все еще не работает для меня! Не могли бы вы помочь мне немного больше, мне действительно это нужно. Я обновлю свои вопросы и добавлю код, который я сейчас пробую!

Ваш ответ на вопрос