Создание пользовательского 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;
}