UIActionSheet не показывает - экран просто темнеет - PullRequest
4 голосов
/ 01 августа 2010

У меня есть приложение для iPhone, основанное на шаблоне «Window based application» и использующее основной вид с некоторыми встроенными подпредставлениями.

Для некоторых действий мне нужно подтверждение пользователя.Поэтому я создаю UIActionSheet и запрашиваю обратную связь.

Проблема в том, что лист действий не отображается вообще.Вместо этого экран становится темнее.Лист и запрошенные кнопки не отображаются.После этого приложение зависает.Затемнение экрана - это нормальное поведение как часть анимации, которая обычно показывает лист действий.

Любопытно, что тот же код работает нормально, если вызывается в методе viewDidLoad.Он не работает, если вызывается в методе buttonPressed, который запускает действие, требующее подтверждения.

- (void) trashButtonPressed {
   // This method is called in the button handler and (for testing
   // purposes) in the viewDidLoad method.
   NSLog( @"trashButtonPressed" );

   UIActionSheet* actionSheet =
        [[UIActionSheet alloc] initWithTitle: @"Test" 
                                    delegate: self 
                           cancelButtonTitle: @"Cancel"
                      destructiveButtonTitle: @"Delete Sheet"
                           otherButtonTitles: nil];

   [actionSheet showInView: self.view];
   [actionSheet release];
}

- (void)       willPresentActionSheet:(UIActionSheet *)  actionSheet {
   NSLog( @"willPresentActionSheet" );
}

- (void)       didPresentActionSheet:(UIActionSheet *)   actionSheet {
   NSLog( @"didPresentActionSheet" );
}

- (void)        actionSheet:(UIActionSheet *)actionSheet
  didDismissWithButtonIndex:(NSInteger)buttonIndex {
   NSLog( @"actionSheet:didDismissWithButtonIndex" );
}

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

Кто-нибудь знает, что здесь не так?

Ответы [ 2 ]

3 голосов
/ 01 августа 2010

Интересно, достаточно ли [actionSheet showInView: self.view];, чтобы файл actionSheet сам сохранялся в self.view. ( edit : сохранить количество переходов от 1 до 4, поэтому здесь нет проблем)

Вы проверили размеры вашего вида?Лист расположен внутри вида, но если self.view ссылается на большой вид прокрутки, возможно, у вас просто лист ниже поверхности.Короче говоря, уверены ли вы, что self.view.frame и self.view.bounds имеют одинаковые значения в двух ситуациях, на которые вы ссылаетесь?Это то же самое представление (когда просто NSLog(@"%x",self.view) - это его адрес)?

изменить , чтобы уточнить: сделайте

NSLog(@"%f %f %f %f",
        self.view.frame.origin.x,self.view.frame.origin.y,
        self.view.frame.size.width,self.view.frame.size.height);

и, пожалуйста, скажите, что вы видите наконсоль.Я получаю ваш «экран становится только темнее», если я устанавливаю либо кадр 0,0,0,0, либо кадр 0,0 320 800, так что это может быть ...

0 голосов
/ 11 февраля 2016

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

В iOS 8 и 9 UIActionSheet отображает ... ох ... но позади на экранной клавиатуре, поэтому вы не можете ее видеть Вы просто видите, что остальная часть экрана становится темнее.

По-видимому, это последняя идея Apple по улучшению пользовательского интерфейса, чтобы экран не загромождался. ; -)

Простое решение - добавить одну строку кода перед отображением вашего UIActionSheet:

[self.view endEditing:true];

Это отклоняет экранную клавиатуру, делая ваш красивый лист действий снова видимым.

В качестве альтернативы, я задокументировал здесь как заменить UIActionSheet на UIAlertController.

...