#iphone #cocoa-touch #uitableview
#iPhone #cocoa-touch #uitableview
Вопрос:
Всем привет, я очень смущен тем, как использовать два разных типа ячеек в одном UITableView с двумя разделами. Первый раздел должен возвращать большую ячейку с большим количеством текста, другой раздел должен возвращать три ячейки для перехода к другим представлениям. Я попробовал это так:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//NSUInteger section;
static NSString *CellIdentifier1 = @"CellIdentifier";
static NSString *CellIdentifier2 = @"Cell";
if (indexPath.section == 0) {
CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil]; cell = [self customTableCell];
[self setCustomTableCell:nil];
}
return cell;
}
else if (indexPath.section == 1) {
cTableViewCell *cell = (cTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"cTableViewCell" owner:self options:nil];
cell = [[cTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2];
[self setCustomTableCell:nil];
}
// Configure the cell...
NSUInteger row = [indexPath row];
cell.textLabel.text = [array objectAtIndex:row];
return cell;
}
return cell;
}
Я установил высоту ячеек в разделах здесь:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section;
if (section == 0) {
return [indexPath row] 80;
}
else
{
return [indexPath row] 44;
}
}
Я получаю эту ошибку: «ячейка» не объявлена (сначала используйте эту функцию). 🙁 Я действительно надеюсь, что вы могли бы мне помочь. Заранее спасибо
Ответ №1:
В конце tableView:cellForRowAtIndexPath:
сделайте это return nil;
вместо return cell;
.
Комментарии:
1. Было бы лучше объявить
cell
вне инструкции if-else, например,UITableViewCell *cell;
и удалить обаreturn cell
оператора из инструкции if-else, и толькоreturn cell
в конце метода. ЕслиtableView:cellForRowAtIndexPath:
когда-либо возвращаетсяnil
, UIKit выдает исключение.2. @MattDiPasquale в моем tableview данные перемешиваются при прокрутке, но когда я устанавливаю для функции удаления значение nil, это работает, данные nut являются динамическими, поэтому я не хочу использовать nil, есть ли какой-либо другой способ для этого. Пожалуйста, помогите человеку.