IPhone UITableView подавить раскрытие кнопки, когда отображается кнопка удаления - PullRequest
2 голосов
/ 19 мая 2009

У меня есть UITableView, в каждой строке которого есть кнопка раскрытия. Когда таблица переведена в режим редактирования и нажата кнопка «Удаление» (знак «-»), отображается кнопка «Удалить», однако кнопка раскрытия не заменяется, а просто скользит влево от кнопки удаления.

Руководство apple UITableView объясняет делегатов для всего, что кажется, за исключением делегата, который вызывается при нажатии знака "-", но до отображения кнопки удаления.

Я хотел бы просто отключить индикатор раскрытия, пока отображается кнопка удаления.

Я предполагаю, что что-то упустил ... Я установил setHidesAccessoryWhenEditing:NO в ячейках таблицы, чтобы индикатор показывал пользователю, что, если он выберет строку, он может ее отредактировать ...

Поведение, которое я пытаюсь скопировать, выполняется в приложении контактов при редактировании контакта. Любая помощь будет принята с благодарностью ...

Спасибо, Грег

Ответы [ 4 ]

4 голосов
/ 19 мая 2009

Стандартный способ сделать это - использовать cell.hidesAccessoryWhenEditing = YES, и это редактирование является модальным действием, при котором навигация обычно отключена.

Приложение «Контакты» на самом деле использует пользовательские ячейки таблицы, и я не удивлюсь, если оно использует не столько аксессуар, сколько изображение, расположенное на правом краю ячейки, судя по его поведению.

Если вы хотите знать, когда появляется кнопка удаления, я бы посоветовал вам попробовать установить наблюдатель Key-Value в свойстве showingDeleteConfirmation ячейки, например:

[cell addObserver: self forKeyPath: @"showingDeleteConfirmation"
          options: NSKeyValueObservingOptionNew context: NULL];

Затем вы реализуете метод обратного вызова наблюдателя:

- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object
                        change: (NSDictionary *) change context: (void *) context
{
    if ( [keyPath isEqualToString: @"showingDeleteConfirmation"] )
    {
        UITableViewCell * cell = (UITableViewCell *) object;
        BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
        if ( isShowing == NO )
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        else
            cell.accessoryType = UITableViewCellAccessoryNone;
    }
}

Следует отметить, что я не уверен, является ли класс UITableViewCell совместимым с KVO для этого свойства, но его стоит попробовать…

2 голосов
/ 13 ноября 2009

Или при создании ячейки вы можете определить тип аксессуара: cell.editingAccessoryType = UITableViewCellAccessoryNone;

1 голос
/ 19 мая 2009

Мой комментарий к решению Джима не очень хорошо встретился ... Вот версия, которая решила проблему для меня ... Еще раз спасибо, Джим!

   - (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object
                        change: (NSDictionary *) change context: (void *) context
  {
    UITableViewCell * cell = object;
    if ( [keyPath isEqualToString: @"showingDeleteConfirmation"] )
    {
        BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
        if ( !isShowing )
        {
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else
        {

            cell.accessoryType = UITableViewCellAccessoryNone;
        }
    }
}

1 голос
/ 19 мая 2009

Индикатор раскрытия управляется tableView:accessoryTypeForRowWithIndexPath:, поэтому, возможно, вы сможете изменить тип аксессуара в режиме редактирования.

Я полагаю, что есть tableView:accessoryButtonTappedForRowWithIndexPath:, может быть, вы можете заметить, что вы собираетесь редактировать режим, а затем изменить то, что tableView:accessoryTypeForRowWithIndexPath: возвращает для каждой строки - никаких аксессуаров в режиме редактирования.

Я бы попробовал.

Вот последовательность вызова (не уверен, поможет ли это). Описание / руководство / примеры из справочника Apple о том, как это сделать Вставка и удаление строк в режиме редактирования .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...