2017-11-03 5 views
0

Ich versuche, zu einem anderen Controller zu segeln, indem Sie auf eine der vorgestellten Optionen auf dem Aktionsblatt klicken. Es funktioniert gut auf iPhone-Bildschirmen und es wird zu geeigneten Szenen geschoben, jedoch tritt das Problem auf dem iPad auf. Ich habe viel nach einem ähnlichen Problem gesucht, aber ohne Erfolg.Controller wird zweimal auf dem iPad-Bildschirm gedrückt

@IBAction func actionSheet(_ sender: UIButton) { 

    let alert = UIAlertController(title: "Please select one of the options", message: nil, preferredStyle: .actionSheet) 

    let cancelActionButton = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in } 

    let recipeActionButton = UIAlertAction(title: "Get The Recipe", style: .default) { action in self.performSegue(withIdentifier: "GetRecipeID", sender: self) } 

    let facebookActionButton = UIAlertAction(title: "Login with Facebook", style: .default) { action in self.handleCustomFacebookLogin() } 

    //actions 
    alert.addAction(cancelActionButton) 
    alert.addAction(recipeActionButton) 
    alert.addAction(facebookActionButton) 

    // support ipad 
    if let popoverController = alert.popoverPresentationController { 
     popoverController.sourceView = sender 
     popoverController.sourceRect = sender.bounds 
    } 
    self.present(alert, animated: true, completion: nil) 
} 

Dieser Ansatz funktioniert auch nicht:

let viewController = UIStoryboard(name: "Detail", bundle: nil).instantiateViewController(withIdentifier: "DetailsVC") as! DetailsViewController 
    let recipeActionButton = UIAlertAction(title: "Get The Recipe", style: .default, handler: { action in 
    self.navigationController?.pushViewController(viewcontroller, animated: true)}) 

ich diese Warnung in der Konsole immer bin, wenn sie von iPhone schieben:

pushViewController:animated: called on <UINavigationController 
0x7fd96a81f800> while an existing transition or presentation is 
occurring; the navigation stack will not be updated. 

Dies zeigt nicht, wenn ich Auslöser Aktion vom iPad, aber neue Controller ist an der Spitze gestapelt. FirstController, SecondController nach dem Klicken auf getRecipe/Login-Schaltfläche vom vorherigen Bildschirm.

Antwort

0

Sie könnten versuchen, den Übergang von einem anderen Vorgang auszuführen

OperationQueue.main.addOperation { 
    self.performSegue(withIdentifier: "GetRecipeID", sender: nil) 
} 
+0

Muss ich diese innerhalb Aktion Anruf setzen? – Vuko

+0

Ja gleiche Position wie vor – Retterdesdialogs

+0

{Aktion in OperationQueue.main.addOperation { self.performSegue (withIdentifier: "GetRecipeID", Absender: null)}} Dies ist nicht etwas leider zu ändern. – Vuko

Verwandte Themen