Avec Swift 4.2, obtenir l’erreur suivante, cela fonctionnait bien avec Swift 4.
Le type 'NSNotification.Name' n'a pas de membre 'UITextField'
Voici mon code d'erreur.
NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
loginAction.isEnabled = textField.text != ""
}
Code complet:
@IBAction func alertWithLogin(){
let alertController = UIAlertController(title: "Please Enter Credential", message: nil, preferredStyle: .alert)
// ADD ACTIONS HANDLER
let loginAction = UIAlertAction(title: "Login", style: .default) { (_) in
let loginTextField = alertController.textFields![0] as UITextField
let passwordTextField = alertController.textFields![1] as UITextField
// do something with after login
}
loginAction.isEnabled = false
alertController.addAction(loginAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in
// do something
}
alertController.addAction(cancelAction)
// ADD TEXT FIELDS
alertController.addTextField { (textField) in
textField.placeholder = "Email"
}
alertController.addTextField { (textField) in
textField.placeholder = "Password"
textField.isSecureTextEntry = true
// enable login button when password is entered
NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
loginAction.isEnabled = textField.text != ""
}
}
// PRESENT
present(alertController, animated: true)
}
textDidChangeNotification
est un membre de UITextField
(et UITextView
).
NotificationCenter.default.addObserver(
self,
selector: #selector(self.keyboardDidShow(notification:)),
name: UITextField.textDidChangeNotification,
object: nil)
NotificationCenter.default.addObserver(forName: Notification.Name.UITextFieldTextDidChange, object: textField, queue: OperationQueue.main) { (notification) in
//...
}
Dans Swift sdk, tout nom de notification devrait être l'extension de struct: Notification.Name
Ainsi, lorsque vous utilisez Notification.Name, vous devez ignorer le nom de la classe (exc.UITextField) et saisir "Notification.Name". puis entrez une partie de votre nom (comme "TextF") et utilisez esc pour afficher la saisie semi-automatique