Ich verwende ActionSheet in meiner Anwendung. Auf meinem iPhone funktioniert es, auf dem iPad-Simulator jedoch nicht.
Das ist mein Code:
@IBAction func dialog(sender: AnyObject) {
let optionMenu = UIAlertController(title: nil, message: "Choose Option", preferredStyle: .ActionSheet)
let deleteAction = UIAlertAction(title: "Delete", style: .Default, handler: {
(alert: UIAlertAction!) -> Void in
println("Filtre Deleted")
})
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {
(alert: UIAlertAction!) -> Void in
println("Cancelled")
})
optionMenu.addAction(deleteAction)
optionMenu.addAction(cancelAction)
self.presentViewController(optionMenu, animated: true, completion: nil)
}
Und mein Fehler:
Beenden der App aufgrund der nicht erfassten Ausnahme 'NSGenericException', Grund: 'Ihre Anwendung hat einen UIAlertController () im Stil UIAlertControllerStyleActionSheet präsentiert. Der modalPresentationStyle eines UIAlertControllers mit diesem Stil ist UIModalPresentationPopover. Sie müssen Standortinformationen für dieses Popover über den popoverPresentationController des Alert-Controllers bereitstellen. Sie müssen entweder ein sourceView und sourceRect oder ein barButtonItem angeben. Wenn diese Informationen bei der Präsentation des Alert-Controllers nicht bekannt sind, können Sie sie in der UIPopoverPresentationControllerDelegate-Methode -prepareForPopoverPresentation bereitstellen. '
quelle
Antworten:
Sie müssen eine Quellansicht oder eine Schaltfläche bereitstellen, bevor Sie optionMenu anzeigen, da es sich auf dem iPad um einen UIPopoverPresentationController handelt, wie in Ihrem Fehler angegeben. Dies bedeutet nur, dass Ihr Aktionsblatt auf die Schaltfläche zeigt, die den Benutzer darüber informiert, wo es begonnen hat.
Zum Beispiel, wenn Sie Ihr Optionsmenü präsentieren, indem Sie auf das rechte Navigationsleistenelement tippen. Sie könnten so etwas tun:
oder Sie können eine Ansicht wie folgt festlegen: (Sie benötigen nur eine dieser 2)
Beachten Sie auch, dass Sie dies nicht angeben müssen, wenn Sie Ihren UIAlertControllerStyle in Alert anstelle von Action Sheet ändern. Ich bin sicher, Sie müssen es herausgefunden haben, aber ich wollte nur jedem helfen, der auf diese Seite stößt.
quelle
Gleiches Problem für mich. Ich hatte einen UIAlertController, der auf dem Telefon gut funktionierte, aber auf dem iPad abstürzte. Das Blatt wird angezeigt, wenn eine Zelle in einer Tabellenansicht angetippt wird.
Für Swift 3 habe ich 3 Codezeilen hinzugefügt, bevor ich es präsentierte:
quelle
Swift 3
Wie bereits erwähnt, sollten Sie UIAlertController so konfigurieren, dass es an einem bestimmten Punkt auf dem iPAD angezeigt wird.
Beispiel für die Navigationsleiste:
quelle
Wenn Sie es in der Mitte ohne Pfeile präsentieren möchten [ Swift 3+ ]:
quelle
Fügen Sie Aussagen in den folgenden Begriffen hinzu, bevor Sie sie präsentieren.
es wird gut funktionieren.
quelle
Nur ein Hinweis, dass Sie diesen Fehler auch erhalten können, wenn Sie die Quellansicht in IB nicht mit der relevanten Variablen in Ihrer App verknüpft haben.
quelle
Sie müssen dies für Ipad hinzufügen
alertControler.popoverPresentationController?.sourceView = self.view
quelle
Ich habe dieses Paket erstellt, um ActionSheet und Popover auf iPhone, Ipad und Mac zu verwalten. https://github.com/AndreaMiotto/ActionOver
quelle