2014-10-11 3 views
7

Ich habe Apps, die UIActionSheet und UIAlertView verwenden.
In iOS8, Apple-Dokumentation und einige Websites sagen, dass sie in iOS8 veraltet sind.
Kann ich nach iOS 8 weiterhin UIActionSheet und UIAlertView verwenden?

UIActionSheet Dokumentation
Wichtig: UIActionSheet in iOS ist veraltet 8. (Beachten Sie, dass UIActionSheetDelegate auch veraltet.) Aktion Blätter in iOS 8 und später zu erstellen und zu verwalten, verwenden Sie stattdessen UIAlertController mit einem preferredStyle von UIAlertControllerStyleActionSheet.

Aber in Xcode 6 mit Implementierungsziel 8.0 generiert keine Warnung für die Verwendung von UIActionSheet und UIAlertView.
Normalerweise generiert Xcode eine Warnung für veraltete API.
Warum generiert Xcode keine Warnungen für UIActionSheet und UIAlertView?
Bedeutet dies, dass Apple diese Klassen nicht wirklich abwertet?
Es ist sehr gefährlich, wenn sie tatsächlich veraltet sind und Xcode keine Warnungen generiert.


in einem anderen Dokumentation Apfel „Was ist neu in iOS 8.0“ sagt:

Die neue UIAlertController Klasse die UIActionSheet und UIAlertView Klassen als die bevorzugte Art und Weise ersetzt Warnungen in Ihrer Anwendung angezeigt werden soll.

https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html

Und UIActionSheet und UIAlertView auf Veraltete APIs Abschnitt der Dokumentation der oben genannten URL nicht aufgeführt.
Also, diese Dokumentation bedeutet UIAlertController vorzuziehen ist, aber UIActionSheet und UIAlertView sind auch noch in iOS 8.

Sollte ich ersetzen UIActionSheet und UIAlertView in meine apps mit neuen UIAlertController Klasse?
Oder kann ich weiterhin UIActionSheet und UIAlertView verwenden?

+1

In einigen meiner Apps hatte ich das Problem, dass die ActionSheetDelegate-Methode zweimal im iPad aufgerufen wurde und ich sie daher durch 'UIAlertController' ersetzen musste. Und wie alle Antworten suggerieren, ist es immer gut, up-to-date zu bleiben und keine depravierten Methoden zu verwenden. –

+0

https://github.com/skywinder/ActionSheetPicker-3.0 –

Antwort

2

Ja, Sie sollten. Vorzuziehen führt zu veraltet, was dazu führt, dass plötzlich abgeschnitten wird.

+0

Danke! "Bevorzugt führt zu veraltet" ist ein guter Rat. Ich habe meinen Code durch einen neuen 'UIAlertController' ersetzt. In meinem Fall war der Ersatz nicht sehr schwierig. Und ich fand, dass der neue 'UIAlertController' einfacher zu verwenden ist als der alte' UIActionSheet' und 'UIAlertView'. –

+0

Stellen Sie nur sicher, dass Sie iOS7 nicht unterstützen müssen, da UIAlertController dort nicht verfügbar ist. – sha

3

Es ist immer am besten, nicht abgeschriebenen Code zu verwenden, das alles summiert sich zu gut geschriebenem Code. Also ja, benutze UIAlertController.

2

Ja, Sie sollten Ihren Code ersetzen.

Als ich versuchte, in meinem Code zu verwenden, funktionierten einige der Funktionen und Delegate-Methoden für beide Klassen UIActionSheet und UIAlertView nicht.

Ich bekam jedes Mal Probleme und seltsame Ergebnisse.

Daher sollten Sie keine veralteten APIs verwenden.

Ich bin mir sicher, ich denke, wenn die App in App Store mit veralteten APIs hochgeladen wird, dann kann diese App abgelehnt werden.

+2

Ich habe gerade eine Reihe von Apps für die neuen Telefone aktualisiert, aber nicht die beiden UIActionSheet-Methoden in jeder App aktualisiert. Sie wurden von App Store-Rezensenten akzeptiert und stehen jetzt zum Verkauf. YMMV – JScarry

+0

@JScarry, danke für die Updates. –

0

Veralteter Code bedeutet normalerweise, dass die früheren Versionen ab der markierten Version und in der Zukunft nicht unterstützt werden. Wenn Sie eine Legacy-App (oder eine App, die frühere Versionen unterstützt) erstellen, sollten Sie das UIActionSheet und UIAlertView verwenden. Wenn Sie jedoch Code für iOS8 + aktualisieren, sollten Sie UIAlertController verwenden. Das Schöne daran ist, dass der Code, den Sie zuvor geschrieben haben, nicht betroffen ist, damit Benutzer eine ältere Version der App ohne Probleme verwenden können.

0

Sie sollten in der Lage sein, weiterhin UIAlertView und UIActionSheet in iOS8 zu verwenden, da sie in iOS8 und nicht in iOS7 veraltet waren. Allerdings habe ich ähnliche Probleme festgestellt =>UIAlertView automatic newline gone in iOS8?. Es scheint also, dass wir möglicherweise schneller zu UIAlertController wechseln müssen, als wir erwartet haben.

2

Es dauert eine Weile, bis Sie die neue Methode herausgefunden haben, so dass Sie diesen Code möglicherweise nützlich finden. Ich unterstütze ältere Versionen von iOS, also verwende ich eine bedingte, um zu entscheiden, welche zu verwenden. Dieser Code wird in meinem App-Delegaten ausgeführt. Wenn Sie es in einem View-Controller ausgeführt wird, ersetzen

[self.window.rootViewController presentViewController:alert animated:true completion:nil]; 

mit

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

Die #define in meinem PCH ist aber ich habe es hier, da es ist, was ich in der bedingten verwenden.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

    - (void)applicationWillEnterForeground:(UIApplication *)application { 

     if (self.window.rootViewController) { 

      if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { 
       [self displayUIAlertController]; 
      } else { 
       [self displayUIAlertView]; 
      } 
     } 

    } 

    - (void)displayUIAlertController { 

     NSString *alertMessage = [NSString stringWithFormat:@"Do you want to resume playing %@ or start a new session?", GAME_NAME_TITLE]; 
     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Welcome Back" 
                     message:alertMessage 
                   preferredStyle:UIAlertControllerStyleAlert]; 

     // You can add as many actions as you want 
     UIAlertAction *startNewSession = [UIAlertAction actionWithTitle:@"Start New Session" 
                    style:UIAlertActionStyleDefault 
                   handler:^(UIAlertAction *action) { 
      [self startNewSession]; 
     }]; 

     UIAlertAction *doNothingAction = [UIAlertAction actionWithTitle:@"Resume" 
                    style:UIAlertActionStyleDefault 
                   handler:^(UIAlertAction *action) { 
         // Do nothing 
     }]; 

     // Add actions to the controller so they will appear 
     [alert addAction:doNothingAction]; 
     [alert addAction:startNewSession]; 

     // Finally present the action 
     [self.window.rootViewController presentViewController:alert animated:true completion:nil]; 
    } 

    - (void)displayUIAlertView { 
     NSString *messageWithTitle = [NSString stringWithFormat:@"Do you want to resume playing %@ or start a new session?", GAME_NAME_TITLE]; 
     self.alertView = [[UIAlertView alloc] initWithTitle:@"Welcome Back" 
                 message:messageWithTitle 
                 delegate:self 
               cancelButtonTitle:@"Resume" 
               otherButtonTitles: @"Start New Session",nil]; 
     [self.alertView show]; 
    } 

    #pragma mark - Alert on restart 
    // buttonIndex 0 is cancel and the game continues 
    // buttonIndex 1 is Start New Session and the old results are saved and new session started 
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
     if (buttonIndex == 1) { 
      [self startNewSession]; 
     } 
    } 
Verwandte Themen