Создание пользовательских UITableViewCell в раскадровке - PullRequest
11 голосов
/ 23 октября 2011

Желание создать статическое меню (IOS 5) и попытка создать пользовательские ячейки в раскадровке для последующей загрузки в сгруппированный просмотр таблицы.

Я создал выход

@property(nonatomic,strong) IBOutlet UITableViewCell *labelCell;

Для класса ViewController установлен правильный TableViewController, и я подключил настраиваемую ячейку к этой розетке.

У меня также есть настроенный делегат и источник данных.

У меня

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath
{
  return self.labelCell;
}

Я уверен, что в этом тонна ошибка, но я просто пытаюсь отобразить одну ячейку и перейти оттуда.Кажется, что нет никаких примеров создания пользовательских ячеек внутри IB через раскадровку.Я все еще могу использовать старый способ создания файла XIB и загрузки его в mainBundle, но я просто хочу оставаться в курсе, я думаю.

но с тем, что я имею выше, я получаю сбой, когда я загружаю этот контроллер представления.SIGABRT

Ответы [ 3 ]

27 голосов
/ 26 ноября 2011

Вот что я узнал о том, как вы получаете ячейки для своего стола при использовании раскадровки. Когда вы перетаскиваете UITableView в ваше представление, оно идет с ячейкой-прототипом, уже настроенной как подпредставление. Чтобы использовать эту прототипную ячейку, установите уникальный идентификатор повторного использования в инспекторе атрибутов, а затем используйте этот же идентификатор для удаления из очереди ячейки в вашем cellForRowAtIndexPath: метод. Я опускаю код для создания ячейки с нуля, если вызов dequeue возвращает nil; Я не думаю, что это может случиться. Поэтому просто удалите ячейку из очереди, настройте ее обычными методами UITableViewCell и верните ее.

Но вы также можете создавать собственные подклассы UITableViewCell. Просто установите имя класса в инспекторе идентичности классов раскадровки и перетащите любые элементы из палитры объектов в свою ячейку. Затем создайте для них свойства IBOutlet в файлах кода вашего подкласса и подключите их к ячейке раскадровки обычным способом. Это намного лучше, чем делать все это в коде!

И, наконец, вы можете иметь более одного вида клеток на вашем столе. Просто перетащите объекты UITableViewCell из палитры в таблицу и присвойте каждому уникальный идентификатор повторного использования в инспекторе атрибутов. В вашем cellForRowAtIndexPath: метод выберите тип каждой ячейки, и вы можете иметь очень гибкое табличное представление.

13 голосов
/ 23 октября 2011

Если вы установили для UITableView использование «Статических ячеек» в раскадровке, вам не нужно реализовывать какой-либо из методов UITableViewDataSource, и вы можете изменить ячейку непосредственно в Интерфейсном Разработчике.Для отдельной ячейки метки выберите ячейку и измените ее тип на «Базовая».Теперь вы можете редактировать ячейку так же, как и любой другой объект просмотра.

4 голосов
/ 03 апреля 2013

Этот учебник был полезен для меня.С помощью тега вы можете ссылаться на любой объект, который вам нужен.

В раскадровке перетащите на UIImageView или UILabel и т. Д. И установите для тега значение 100 (как хотите), а затем при использовании - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathтег для ссылки на него.

Вот пример кода в руководстве, просто не забудьте установить теги в раскадровке:

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

// Configure the cell...
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Display recipe in the table cell
Recipe *recipe = [recipes objectAtIndex:indexPath.row];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:recipe.imageFile];

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101];
recipeNameLabel.text = recipe.name;

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102];
recipeDetailLabel.text = recipe.detail;

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