2017-11-26 5 views
0

Ich versuche derzeit, einen AlertController mit einem TextField innerhalb zu öffnen. WennHinzufügen von TextField zu AlertController bricht AlertController

läuft
let configAlert = UIAlertController(title: "Configure Add-On", message: "Enter Your Add-On Name:", preferredStyle: UIAlertControllerStyle.alert) 

configAlert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction!) in 
     // Handle Input   
})) 

present(configAlert, animated: true, completion: nil) 

alles funktioniert gut, aber sobald ich die TextField-

configAlert.addTextField { (textField) in 
    textField.placeholder = "Name" 
} 

die Benachrichtigung dauert etwa 10-mal länger hinzufügen sofort zu öffnen, entlässt, und ich diesen Fehler in der Konsole spammed etwa 30-mal:

2017-11-26 13:04:08.985783-0500 MinelyMod[380:14792] Warning: Attempt to dismiss from view controller <UISplitViewController: 0x147e0a6a0> while a presentation or dismiss is in progress! 

Hier wird die fertige AlertController thats, andernfalls

let configAlert = UIAlertController(title: "Configure Add-On", message: "Enter Your Add-On Name:", preferredStyle: UIAlertControllerStyle.alert) 

configAlert.addTextField { (textField) in 
    textField.placeholder = "Name" 
} 

configAlert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction!) in 
    // Handle Input    
})) 

present(configAlert, animated: true, completion: nil) 
+0

Welche Art von Ereignis löst den Aufruf Ihres Codes aus? Es sieht so aus, als würde es mitten in der Präsentationsanimation für einen anderen Controller passieren. – Bill

+0

Stellen Sie sicher, dass Sie die Methode 'present (_: UIViewController)' aus dem Hauptthread aufrufen. Übrigens sollten Sie auch Ihren Handle-Eingabecode posten. –

+0

Ich habe es kopiert und in ein neues Projekt eingefügt und es hat gut für mich funktioniert. Ich benutze xcode 8.3. Versuchen Sie das und sehen Sie, ob es dort funktioniert und wenn ja, ist das Problem woanders. – dscrown

Antwort

0
let alertController = UIAlertController(title: "Title", message: "", preferredStyle: .alert) 

    alertController.addAction(UIAlertAction(title: "Save", style: .default, handler: { 
     alert -> Void in 
     let textField = alertController.textFields![0] as UITextField 
     // do something with textField 
    })) 
    alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) 

    alertController.addTextField(configurationHandler: {(textField : UITextField!) -> Void in 
     textField.placeholder = "Search" 
    }) 

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

Nur Code-Antworten werden nicht empfohlen. Bitte erläutern Sie, was das OP falsch gemacht hat ... – Honey

Verwandte Themen