Несколько UIActionSheets открываются одновременно - PullRequest
3 голосов
/ 25 декабря 2010

У меня есть вопрос относительно 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];
    }
}

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

Ответы [ 2 ]

4 голосов
/ 25 декабря 2010

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

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

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

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

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

0 голосов
/ 21 июля 2014

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

self.navigationItem.rightBarButtonItem.enabled = NO;

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

...