2012-04-17 2 views
0

У меня есть табличный вид, который работает достаточно хорошо, но теперь я хотел бы, чтобы первая ячейка была «разблокировкой» кнопки для остальной части ячеек.Создание первой ячейки UITableView, различной для каждой другой ячейки

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [currentPack count] + 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Row is %i", indexPath.row); 

    if(indexPath.row == 0) 
    { 
     SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable]; 
     cell._NameLabel.text = @"Unlock This Pack; 
     [cell._startButton setAlpha:0.0]; 

     return cell 
    } 
    else 
    { 
     SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable]; 
     cell._NameLabel.text = [currentPack objectAtIndex:indexPath.row - 1]; 

     return cell 
    } 
} 

Теперь это вид работ, первая ячейка отличается от других, и выглядит точно так, как должна. Моя проблема заключается в том, что по какой-то причине некоторые из более поздних клеток используют

[cell._startButton setAlpha:0.0]; 

часть, даже если indexPath.row не 0, когда они сделаны. Это не происходит с каждой ячейкой, просто прерывистые, иногда, если я часто прокручиваю таблицу вверх и вниз, тогда другие ячейки тоже поднимут эту проблему. В любом другом случае таблица работает нормально, выбор ячейки вызывает правильный ответ и т. Д. Кто-нибудь может понять, что может быть причиной этого? Казалось бы, это было бы очень просто реализовать изначально ...

Благодаря

+2

Уверен, что 'dequeOrCreateInTable:' использует тот же идентификатор reuseIdentifier для обеих ячеек. Во всяком случае, если альфа-значение - единственное отличие, вы можете просто поместить '[cell._startButton setAlpha: 1.0];' в 'else' –

ответ

4

Используйте другой идентификатор повторного использования для двух типов клеток, так что они не смешиваются, когда повторно.

Или добавьте следующую строку в остальных строк:

[cell._startButton setAlpha:1.0]; 
+1

Спасибо, я официально идиот :-) Я знал, что это будет что-то простое, Я пропустил. – TheBestBigAl

+1

Ха-ха, мы все в свое время! – lnafziger

0

Я хотел бы предложить, чтобы создать отдельный экземпляр SoundCell и сохранить его как я-вар. Просто настройте его один раз и верните для индекса строки 0. Остальные строки возвращают ваши «обычные» ячейки многократного использования.

1

Вы попадаете в клеточное кэширование. Если вы собираетесь называть setAlpha на некоторых ячеек, установите его на всех из них, чтобы вы не закончили устаревшее значение из существующей ячейки.