2016-08-01 13 views
5

Ich arbeite an einem ViewController mit Code (kein Storyboard). Ich versuche und AlertControllerIOS erstellen UIAlertViewController programmgesteuert

erkläre ich muss hinzufügen propery in .m

@property (nonatomic, strong) UIAlertController *alertController; 

Und init in loadview Methode

//alertviewController 
    _alertController = [[UIAlertController alloc]initWithNibName:nil bundle:nil]; 

und rufen Sie die Alertview in viewDidLoad:

_alertController = [UIAlertController alertControllerWithTitle:@"Error display content" message:@"Error connecting to server, no local database" preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 
       LandingPageViewController *viewController = [[LandingPageViewController alloc] initWithNibName:nil bundle:nil]; 
    //   viewController.showNavBarBackButton = YES; 
       [[AppDelegate sharedAppDelegate].rootViewController cPushViewController:viewController]; 
}]; 
[_alertController addAction:ok]; 
[self presentViewController:_alertController animated:YES completion:nil]; 

Ich weiß nicht, warum die Warnung nicht angezeigt wird. Irgendwas stimmt nicht mit meinem Code. Wie richte ich ein und rufe alertViewController programmgesteuert auf?

+0

Hallo versucht, aber es für:
eine Erweiterung von UIViewController mit Ihrer Funktion erstellen mit den erforderlichen Parameter Argumente

extension UIViewController { func displayalert(title:String, message:String) { let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert) alert.addAction((UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in alert.dismiss(animated: true, completion: nil) }))) self.present(alert, animated: true, completion: nil) } } 


Nun rufen Sie diese Funktion von Ihrem View-Controller-Alarm angezeigt 'UIAlertController' deklariert den Selektor 'show'. [_alertController show]; –

+0

Entfernen Sie diese Zeile '_alertController = [[UIAlertController alloc] initWithNibName: nil bundle: nil];' Ich bin mir nicht sicher, ob das das Problem behebt, aber es wird nicht benötigt, besonders nicht in 'loadView', (meinst du' viewDidLoad'?) –

+0

versuchen Sie, diese Warnung in viewDidAppear aufrufen –

Antwort

24
- (void)logoutButtonPressed 
{ 
    UIAlertController * alert = [UIAlertController 
           alertControllerWithTitle:@"Logout" 
           message:@"Are You Sure Want to Logout!" 
           preferredStyle:UIAlertControllerStyleAlert]; 

    //Add Buttons 

    UIAlertAction* yesButton = [UIAlertAction 
           actionWithTitle:@"Yes" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) { 
            //Handle your yes please button action here 
            [self clearAllData]; 
           }]; 

    UIAlertAction* noButton = [UIAlertAction 
           actionWithTitle:@"Cancel" 
           style:UIAlertActionStyleDefault 
           handler:^(UIAlertAction * action) { 
            //Handle no, thanks button 
           }]; 

    //Add your buttons to alert controller 

    [alert addAction:yesButton]; 
    [alert addAction:noButton]; 

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

hallo, wo der [selbst presentViewController: Warnung animiert: YES-Abschluss: Nil]; scheint kann nicht in viewdidload aufrufen –

+0

Hallo, es funktioniert, wenn ich separate Methode erstellen und Aufruf in Viewdidload, aber es gibt eine Warnung in der Konsole: Darstellung von Controllern auf detached View-Controller wird abgeraten –

+0

wo ru Durchführung ur Alert-Controller, kann es klicken oder klicken einige Methode, verwenden Sie über den vollständigen Code in einer Methode und nennen Sie es in Ihrem Wunschort.hoffe du hast es – ChenSmile

1

Und in Swift> = 3:

let alertController = UIAlertController(title: "Some Error", 
               message: "Pleas confirm?", 
               preferredStyle: .alert) 

    let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
      alertController.addAction(defaultAction) 

    self?.present(alertController, animated: true, completion: nil) 
+1

Hallo, wo ist der Ort, um den Code zu platzieren, wenn Benutzer zu diesem Viewcontroller kommen und App für einige Logik überprüft hat (zum Beispiel keine Coredata zu zeigen?) –

+0

Es liegt an Ihnen, Sie können es in ViewDidLoad wenn Sie würden mag es angezeigt werden, wenn der Benutzer zu dieser Ansicht kommt, oder Sie können es auf einen bestimmten Knopf drücken, drücken Sie über IBAction –

+1

Hallo, ich habe festgestellt, legte geladen wurde nicht funktioniert für AlertViewController. Müssen in Sicht seinDidAppear –

1

Globale Alert-Controller, der in allen View-Controller zugänglich ist. Fehler keine sichtbare Schnittstelle ist

class TestViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.displayalert(title: <String>, message: <String>) 
    } 
}