2013-07-22 3 views
0

я следовал этой torturial:Пользовательские сотовый взгляд в UITableView

http://www.raywenderlich.com/32283/core-graphics-tutorial-lines-rectangles-and-gradients 

Он охватывает настройку динамических ячеек таблицы, я должен сделать это со статическими ячейками таблицы.

Я дал каждую клетку идентификатора «Cell», как он это делает в учебнике, я тогда подклассы контроллера представления таблицы и реализован следующим образом:

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


    // START NEW 
    if (![cell.backgroundView isKindOfClass:[CostumCellBackground class]]) { 
     cell.backgroundView = [[CostumCellBackground alloc] init]; 
    } 


    if (![cell.selectedBackgroundView isKindOfClass:[CostumCellBackground class]]) { 
     cell.selectedBackgroundView = [[CostumCellBackground alloc] init]; 
    } 
    // END NEW 


    cell.textLabel.backgroundColor = [UIColor clearColor]; // NEW 

    return cell; 
} 

CostumCellBackground рисует прямоугольник.

Я получаю ошибку «UITableView DataSource должен возвращать ячейку из Tableview: cellForRowAtIndexPath:.

Насколько я понимаю UITableView зацикливается для каждой ячейки в раскадровке, и он должен вернуть клетку

Итак, что происходит здесь и почему возвращение ячейки ноль, или оленья кожа возвращение вообще?

Единственное отличие состоит в том, что они являются статические таблицы, а не прототипы.

+2

, потому что ячейка равна нулю. вы должны проверить, если (cell == nil) { // напишите свой код на c reate cell } –

ответ

0

Где вы создающих e ваша клетка ??

Вы должны добавить после:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

такого кода (или что-то другое инициализатора):

if (cell == nil) { 
    cell = [[UITableViewCell alloc] init]; 
} 
+0

Как я уже сказал в своем ответе, это не обязательно для iOS6. – JonahGabriel

1

Если вы используете раскадровки и iOS6 и ваш контроллер представления является UITableViewController, вы всегда получить ячейку, если ваш идентификатор ячейки присутствует в вашем раскадровке. Проверка на cel == nil - это старый способ сделать это.

У вас есть пользовательская ячейка в вашем раскадровке с идентификатором «Ячейка»?

Кроме того, используйте:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

Если вы посмотрите в UITableView.h файл, который вы найдете:

// newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered 
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); 
+0

Im get 'не удалось удалить ячейку с идентификатором. Cell - должен зарегистрировать ниб или класс для идентификатора или подключить прототип ячейки в раскадровке. –

+0

Извините, посмотрите на мой ответ на другой вопрос, который должен иметь аналогичный ответ : http://stackoverflow.com/questions/17793935/re-drawing-static-cells-and-giving-them-a-new-look-ios/17794344#17794344 – JonahGabriel

-1

Попробуйте это в начале вашего метода:

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

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil){ 
     cell = [[UITableViewCell alloc] 
       initWithStyle: UITableViewCellStyleDefault 
       reuseIdentifier:CellIdentifier 
       ]; 
    } 
+0

Как я сказал в своем ответе, это не требуется с iOS6. – JonahGabriel

Смежные вопросы