2014-09-26 5 views
4

Я могу показать actionSheet в iOS 7, но не могу показать в среде iOS 8. Есть ли способ отслеживать?UIActionSheet не отображается в iOS 8

UIActionSheet *_actionSheet = [[UIActionSheet alloc] initWithTitle:@"Account" 
                   delegate:self 
                 cancelButtonTitle:@"Close" 
               destructiveButtonTitle:@"Log Out" 
                 otherButtonTitles:@"View Account", nil]; 

    [_actionSheet showInView:appDel.window]; 
+1

Это потому, что '' UIActionSheets' больше не существует в 'iOS8', они устарели в пользу' UIAlertController'. Читайте https://developer.apple.com/Library/ios/documentation/UIKit/Reference /UIAlertController_class/index.html – Popeye

+2

@Popeye «устарело» не означает «устранено», а скорее «избегайте». Он все равно должен работать, хотя –

+0

В моем приложении для iPhone нет, он больше не работал. С iOS 9 мой UIActionSheet просто затемнил весь экран, и всплывающее меню не появилось. Подробности моего исправления здесь: http://stackoverflow.com/questions/32824199/action-sheet-problems-in-ios-9/35316029#35316029 (Sigh ...) –

ответ

3

UIActionSheet осуждается в прошивке 8.

enter image description here

Для создания и управления листами действий в прошивке 8 вы должны использовать UIAlertController с preferredStyle из UIAlertControllerStyleActionSheet.

См. Это example.

+1

Я также ссылаюсь на эту страницу, но я получение «Вы должны указать либо sourceView, и sourceRect, либо barButtonItem. Если эта информация неизвестна, когда вы представляете контроллер предупреждений, вы можете предоставить ее в методе UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation». Я ссылаюсь на другую страницу, но я застрял в части кнопки. http://stackoverflow.com/questions/24224916/presenting-a-uialertcontroller-properly-on-an-ipad-using-ios-8 –

0

Это явно регресс в iOS 8. Я подал rdar, пожалуйста, сделайте это тоже.

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

0

У меня были проблемы с файлами действий, когда вышел iOS 8. Вероятно, это проблема с представлением, которое вы представляете. Можете ли вы показать его в реальном виде, а не в окне? Сначала я экспериментировал, а в худшем случае завершаю метод show в чем-то конкретном для iOS 7 и 8. Я начал использовать PSTAlertController для управления моими предупреждениями и файлами действий. Он поддерживает UIAlertView, UIActionSheet и UIAlertController. Он будет сортировать, какой из них использовать, а также дать вам доступ к блочным действиям для ваших кнопок, все еще поддерживая iOS 7 и 8. Стоит посмотреть.

1
UIAlertController * alert= [UIAlertController 
          alertControllerWithTitle:@"Info" 
          message:@"You are using UIAlertController" 
          preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction 
        actionWithTitle:@"OK" 
        style:UIAlertActionStyleDefault 
        handler:^(UIAlertAction * action) 
        { 
         [alert dismissViewControllerAnimated:YES completion:nil]; 

        }]; 
UIAlertAction* cancel = [UIAlertAction 
         actionWithTitle:@"Cancel" 
         style:UIAlertActionStyleDefault 
         handler:^(UIAlertAction * action) 
         { 
          [alert dismissViewControllerAnimated:YES completion:nil]; 

         }]; 

[alert addAction:ok]; 
[alert addAction:cancel]; 

[self presentViewController:alert animated:YES completion:nil]; 
0

Если кто-то видит эту проблему, проблема на самом деле вызвана прошивкой 8 и 9 отображения вашего действия листа за экранной клавиатурой, так что вы не можете увидеть его. Вы просто видите, что остальная часть экрана становится темнее. Genius.

Самое простое решение, чтобы добавить одну строку кода перед отображением вашего UIActionSheet:

[self.view endEditing:true]; 

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

Смежные вопросы