2015-10-28 8 views
0

в моем файле .hпереключения ячейки при выборе ячейки

NSIndexPath *selectedCellIndexPath; 

в моей .m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    selectedCellIndexPath = indexPath; 
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(selectedCellIndexPath != nil && [selectedCellIndexPath compare:indexPath] == NSOrderedSame){ 
     return 80; 
    } else if ([selectedCellIndexPath compare:indexPath] != NSOrderedSame){ 
    return 40; 
    } 

    return 40; 
} 

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

+0

Если вы хотите свернуть ячейку? –

+0

@vienvu, когда вы нажимаете расширенную ячейку, вроде переключателя, если вы будете использовать код – lizzy91

ответ

0

Вы должны установить selectedCellIndexPath обратно в ноль, когда пользователь выбирает расширенную ячейку:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.selectedCellIndexPath = (self.selectedCellIndexPath && [self.selectedCellIndexPath compare:indexPath] == NSOrderedSame) ? nil : indexPath; 
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
} 
+0

, но не могли бы вы объяснить этот фрагмент для меня, его синтаксис, который я раньше не видел, в частности вопросительный знак. NSOrderedSame)? nil: indexPath; – lizzy91

+0

Это тернарный оператор. Синтаксис: 'let x = a? b: c'. 'a' является логическим значением. Если 'a == true', то' x = b', если 'a == false', то' x = c' – joern

+0

Другими словами, это то же самое, что и запись 'if a {x = b} else {x = c } ' – joern

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