2016-07-26 7 views
2

Ich bin auf der Suche nach Hilfe hier!Warnung: Versuch, <UIImagePickerController:> auf <...> zu präsentieren, die bereits präsentiert (null)

Ich habe einen ActionController in swift und ich versuche, einen UIImagePickerController von einer der Aktionen zu erstellen, aber wenn ich es ausführen, zeigt es mir diese Warnung: Versuchen Sie, auf < ...> das ist bereits vorhanden präsentiert (null), und es präsentiert nichts.

Hier ist mein Code:

let actionController = TweetbotActionController() 



     actionController.addAction(Action("Photo Library", style: .Default , handler: { action in 
      let picker = UIImagePickerController() 
      picker.sourceType = .PhotoLibrary 
      picker.allowsEditing = false 
      picker.delegate = self 

      self.presentViewController(picker, animated: true, completion: nil) 


     })) 

    actionController.addAction(Action("Take Photo", style: .Default, handler: {action in 

     NSLog("Take Photo Pressed") 
    })) 

    actionController.addSection(Section()) 
    actionController.addAction(Action("Cancel", style: .Cancel, handler:nil)) 

    presentViewController(actionController, animated: true, completion:nil) 

Vielen Dank !!!

+0

ich das versucht: wenn self.presentedViewController == null { self.presentViewController (Picker, animiert: true, Vervollständigung: null) } Aber es beseitigt die Warnung, zeigt aber nicht den PickerController. –

+0

Sie präsentieren ImagePicker vor dem Schließen von ActionController. Versuchen Sie, "actionController" zu verwerfen und öffnen Sie ImagePicket im Abschluss-Handler. – RJE

+0

Meinten Sie durch „die Action Entlassung“ mit diesen:. Dispatch_async (dispatch_get_main_queue() –

Antwort

3

Die Fehlermeldung ist ziemlich selbsterklärend. Sie können einfach nicht zwei View-Controller gleichzeitig präsentieren.

Sie sollten zuerst die AlertController schließen und dann die neue öffnen. Um dies zu erreichen, haben Sie mehrere Möglichkeiten, aber ich glaube, das einfachste ist, den AlertController zu schließen, wenn Sie "Photo Library" drücken und dort eine Art Flag setzen. Dies kann eine Variable namens shouldOpenPicker sein, die immer falsch ist, wenn Sie nicht auf die Schaltfläche drücken.

Dann können Sie die completion Schließung des presentViewController (die, die AlertController dargestellt) verwenden den Picker-Controller zu öffnen nur wenn die Flag-Variable auf true gesetzt ist. Wenn dies der Fall ist, präsentieren Sie den Picker-Controller und setzen das Flag erneut auf false.

UPDATE:

Sie sollen die zweiten View-Controller vor, wenn den ersten, so etwas wie dies zurückgewiesen:

alert.addAction(UIAlertAction(title: "Photo library", style: .Default, handler: { action in 
    alert.dismissViewControllerAnimated(true, completion: { 
     let picker = UIImagePickerController() 
     picker.sourceType = .PhotoLibrary 
     picker.allowsEditing = false 
     picker.delegate = self 

     self.presentViewController(picker, animated: true, completion: nil) 
    }) 
})) 
+0

Ja, ich verstehe die Verwendung der Flagge, aber was nicht so klar ist, wie man den Picker-Controller mit dem Abschluss der AlertController presentViewController öffnen. –

+0

@ MelissaRojas Siehe meine aktualisierte Antwort. –

+0

Ja, es funktioniert:) Danke für Ihre Hilfe und Erklärung !!! –

Verwandte Themen