UITableView и его ячейка в xib-файле

Короче говоря, я хочу создать файл XIB, в котором он будет содержаться:

  1. Вид. С этой точки зрения, у него есть много вещей и табличное представление. (подключен источник данных, делегат владельцу файла). Это представление является основным представлением файлов XIB.

  2. Пользовательская ячейка (используйте в качестве ячейки прототипа tableView, поскольку XIB не поддерживает прототип tableView).

Как я мог достичь обоих? Кроме того, я хочу знать, что то же самое относится и к UICollectionView.

Я создал оба из них, загрузите его в основной вид (основной вид находится в главной раскадровке). Но tableView не загружает пользовательскую ячейку, как ожидалось. Ячейка просто пуста, не похожа на то, что она спроектирована в перо.

РЕДАКТИРОВАТЬ 1

Вот как я могу зарегистрировать перо на главном экране раскадровки:

- (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass
{
    id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil];
    [viewController view].frame = self.containerView.bounds;

    [self addChildViewController:viewController];

    return [viewController view];
}

У меня много viewControllers, поэтому я считаю, что это лучший способ добавить VC.

Что касается кончика в описании выше, я просто использую обычную инициализацию:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // init cell
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    if (!cell) {
        cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
    }

    return cell;
}

Если в представлении загрузился метод, я зарегистрирую перо в tableView, оно будет аварийно завершено в [tableView dequeueResuableCell...]. Зарегистрированный код:

- (void)viewDidLoad
{
    [super viewDidLoad];

//    [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil]
//                forCellReuseIdentifier:@"CustomCell"];
// I'm commenting it, because it caused crash.
}

Сбой сообщения:

  

*** Завершение работы приложения из-за необработанного исключения   NSUnknownKeyException, причина: '[   setValue: forUndefinedKey:]: этот класс не является ключевым значением   совместимый с кодировкой для ключа tableView. '

Что я тут не так сделал? Вот картина, как я разработал перо:

Model

Как видите, mainView владельца файла подключен к mainView, где он содержит tableView. CustomCell - это просто пользовательская ячейка, определенная в том же файле (файл .m).

7 голосов | спросил Eddie 22 J000000Wednesday15 2015, 11:05:53

1 ответ


0

Вы должны зарегистрировать перо следующим образом.

[self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"]

Я обычно видел, что registerClass не загружает представление, а только класс. Я не знаю почему.

Также один .xib должен содержать только одно представление. Таким образом, вы должны сделать другое для UITableViewCell и UITableView

Что касается аварии, с которой вы сталкиваетесь. Похоже, ошибка связана с выходом с именем tableView. Попробуйте удалить розетки и заново их инициализировать

Дополнения

для UICollectionView вы можете зарегистрировать класс, он загрузит ваше представление из xib.

 [self.collectinView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier]

Обновление

Если вы используете раскадровку, вы можете просто добавить две ячейки прототипа, и это добавит две ячейки в табличное представление. Вы можете добавить все представления прямо здесь и дать им различные файлы классов. Уменьшит количество файлов XIB, которые вам нужно поддерживать, а также вам не потребуется регистрировать свои перья. Это может быть учебное пособие для этого

ответил Ganesh Somani 22 J000000Wednesday15 2015, 12:35:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132