2012-04-04 4 views
4

Я искал попытку разграничения между состояниями редактирования в UITableView.Различают UITableView Editing States?

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

В любом случае, я могу различать эти два?

Спасибо.

EDIT:

Решение благодаря Родриго

И каждая клетка и весь TableView имеет «редактирование» значение BOOL, поэтому я перебрать все клетки и, если более чем один из них редактирует то мы знаем, что вся таблица (пользователь нажал кнопку редактирования), однако, если редактируется только один, мы знаем, что пользователь вытащил ячейку, отредактировав ее, что позволяет мне обрабатывать каждое состояние редактирования отдельно!

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 


    int i = 0; 
    //When editing loop through cells and hide status image so it doesn't block delete controls. Fade back in when done editing. 
    for (customGuestCell *cell in self.tableView.visibleCells) 
    { 
     if (cell.isEditing) { 
      i += 1; 
     } 
    } 

    if (i > 1) 
    { 
     for (customGuestCell *cell in self.tableView.visibleCells) 
     { 
      if (editing) 
      { 
       // loop through the visible cells and animate their imageViews 
       [UIView beginAnimations:nil context:nil]; 
       [UIView setAnimationDuration:0.4]; 
       cell.statusImg.alpha = 0; 
       [UIView commitAnimations]; 
      } 
     } 
    } 
    else if (!editing) 
    { 
     for (customGuestCell *cell in self.tableView.visibleCells) 
     { 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 
      cell.statusImg.alpha = 1.0; 
      [UIView commitAnimations];    
     } 
    } 
} 
+0

IMHO это не работает: когда в обычном режиме редактирования (все ячейки редактируются), то первая ячейка считает, что она находится в режиме «салфетки в режиме удаления». – obiwahn

ответ

3

Есть одна стратегия, я не тестирую сейчас, но, возможно, работаю.

Вы можете настроить UITableView в режиме редактирования и протестировать функцию isEditing. Но ячейка имеет то же самое isEditing. Таким образом, вы можете проверить, находится ли только одна ячейка в состоянии редактирования или все UITableView.

Проверьте, чтобы при установке одной ячейки в состояние редактирования UITableView вообще изменил состояние редактирования.

+0

Ahh, действительно хорошая идея, но я дал попробовать и не смог заставить ее работать таким образом. –

+0

Получил это решение, работая, спасибо! Я опубликовал, как я обошел это в своем OP. –

1

Единственный надежный способ, который я нашел для этого, - это поддерживать частный флаг inEditMode и переключать этот флаг в setEditing:animated. Затем используйте inEditMode, а не isEditing, чтобы проверить, находится ли таблица в режиме редактирования или нет.

+0

Извините, здесь не так много информации, спасибо за ответ, хотя и не могли бы вы расширить его? Как именно вы используете BOE для 'inEditMode' BOOL, чтобы отличать режимы редактирования? –

+1

В отличие от 'isEditing', этот' inEditMode' является * только * 'YES', если таблица« действительно »находится в режиме редактирования (то есть не через одно действие салфетки). – edsko

2

Решение, которое я выбрал, состояло в том, чтобы переопределить действие для кнопки редактирования на пользовательский метод, например editBtnTapped. В этом методе я устанавливаю переменную editButtonPressed, а затем, потому что мы переопределили действие кнопки редактирования, вручную вызовите setEditing: animated :.

В viewDidLoad:

[self.navigationItem.rightBarButtonItem setAction:@selector(editBtnPressed)]; 

И тогда новый метод действия:

- (IBAction) editBtnPressed 
{ 
    if ([self isEditing]) 
    { 
    self.editButtonPressed = NO; 
    [self setEditing:NO animated:YES]; 
    } 
    else 
    { 
    self.editButtonPressed = YES; 
    [self setEditing:YES animated:YES]; 
    } 
} 

Сейчас в setEditing: анимированные: Я проверяю флаг editButtonPressed, чтобы определить, если я там из-за Нажмите кнопку «Изменить» или просто проведите пальцем по экрану. Если я там из-за кнопки «Редактировать», я добавляю ячейку; в противном случае я этого не делаю.

Имейте в виду, что вам может понадобиться флаг в другом месте (например, numberOfRowsInSection).

Надеюсь, что эта альтернатива поможет.

С уважением,

--John

4

Даже если этот пост довольно старый, следующим может оказаться полезной для других:

Если вы реализуете следующий делегат сообщение: - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;

и

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;

Эти методы будут вызываться при редактировании одной строки. -[UIViewController setEditing:animated:] будет вызываться только тогда, когда пользователь нажимает кнопку редактирования.