Одновременно открыто несколько таблиц UIActionSheets

У меня вопрос относительно таблицы UIActionSheet на iPad.

Когда я представляю лист действий из presentFromBarButtonItem:animated: и затем представляю еще один (нажав на другой UIBarButtonItem на том же UIToolbar), исходный UIActionSheet остается открытым.

Это не выглядит особенно хорошо.

Я пробовал выполнить итерацию self.view.subviews и преобразовать представление в таблицу UIActionSheet и вызвать соответствующий метод dismissWithClickedButtonIndex:animated:, однако он не работает.

Например:

- (void)pressBarButtonItem {
    for (UIView *view in self.view.subviews) {
        [(UIActionSheet *)view dismissWithClickedButtonIndex:-1 animated:YES];
    }
}

Любая помощь приветствуется.


person Jack Greenhill    schedule 25.12.2010    source источник


Ответы (2)


Я думаю, вы имеете в виду showFromBarButtonItem:animated: вместо presentFromBarButtonItem:animated:?

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

Сохраните ссылку на лист действий в собственности. После вызова showFromBarButtonItem сохраните его в свойстве, используя self.itemFooActionSheet = actionSheet;.

Перед отображением другого листа действий из другого элемента вызовите dismissWithClickedButtonIndex для itemFooActionSheet. После его отклонения вы также можете освободить itemFooActionSheet и установить для него значение nil, чтобы он не зависал в памяти.

Кроме того, возможно, что код попытается снова отобразить лист действий элемента Foo, когда он уже отображается. В методе, в котором вы показываете лист действий элемента Foo, сначала проверьте, не является ли self.itemFooActionSheet равным нулю, и если да, просто покажите его без повторного создания или отклоните + уничтожьте текущий лист действий и создайте новый (старый может содержат устаревшую информацию).

person Community    schedule 25.12.2010

В UIBarButtonItems вы всегда можете установить для свойства enabled значение NO, если вы не хотите, чтобы люди нажимали на него, например:

self.navigationItem.rightBarButtonItem.enabled = NO;

... а затем снова установите для него значение YES, когда пользователь нажал кнопку (или где-то за пределами actionSheet).

person turingtested    schedule 21.07.2014