Создание пользовательского UITableViewCell внутри раскадровки

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

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

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

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

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

У меня есть

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

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

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

Ответ 1

Если вы установили UITableView для использования Static Cells в раскадровке, вам не нужно внедрять какие-либо из методов UITableViewDataSource, и вы можете изменить ячейку непосредственно в Interface Builder. Для отдельной ячейки ярлыка выберите ячейку и измените ее тип на "Основной". Теперь вы можете редактировать ячейку так же, как и любой другой объект вида.

Ответ 2

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

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

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

Ответ 3

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

В раскадровке перетащите объект 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;
 }