2012-06-04 2 views
0

Есть ли способ изменить размер ячейки uitableview в соответствии с нажатием на ячейку? Например: ячейка с шириной 100.0f, в ячейке первого щелчка меняет ширину до 150.0f, а для ячейки второго щелчка меняет ширину обратно до 100.0f. Как я могу это сделать?Несколько кликов на uitableviewcell

ответ

1

Вы должны иметь возможность индексировать NSMutableDictionary с объектами NSIndexPath. Это позволит вам кэшировать размеры, которые вы хотите использовать для ваших TVCell с щелчками. Тогда просто вытащить их во время выполнения:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSNumber *newHeight; 
    NSNumber *height = [[self heightCache] objectForKey:indexPath]; 

    if (height == nil) newHeight = [NSNumber numberWithFloat:100.0]; 
    else newHeight = [NSNumber numberWithFloat:[height doubleValue] + 50]; 
    [[self heightCache] setObject:newHeight forKey:indexPath]; 
    [tableView reloadData]; // also consider reloadRowsAtIndexPaths: 
} 

Между тем в делегата:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSNumber height = [heightCache objectForKey:indexPath]; 
    return height == nil ? defaultHeight : [height floatValue]; 
} 

UPDATE: О упс, я думал, что ты имел в виду TVCells просто получить больше и больше. Да, просто измените поплавки в моем примере на bools, а затем по высоте для строки верните высоту, основанную на bool.

1

Необходимо сохранить значение bool, изменить это значение bool на каждый последующий щелчок.

Теперь, основываясь на этом bool, определите cellForRowAtIndexPathmethod и по методу didSelectRowAtIndexPath просто обновите bool и перезагрузите table.

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