类型 'NSNotification.Name' 没有成员 'UITextField'
Type 'NSNotification.Name' has no member 'UITextField'
在 Swift 4.2 中出现以下错误,在 Swift 4.
中工作正常
Type 'NSNotification.Name' has no member 'UITextField'
这是我的错误代码。
NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
loginAction.isEnabled = textField.text != ""
}
完整代码:
@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
是 UITextField
(和 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
//...
}
在swift sdk中,所有的通知名称都应该是struct的扩展:Notification.Name
所以当使用Notification.Name时,你应该忽略Class名字(exc.UITextField),输入"Notification.Name."然后输入一些你的名字(比如"TextF" ) 并使用 esc 显示自动完成
我遇到了同样的问题,
这是最简单的解决方案:
而不是使用forName: NSNotification.Name.UITextField.textDidChangeNotification
在forName:
参数中这样使用:
NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
//Your code goes here...
}
在 Swift 4.2 中出现以下错误,在 Swift 4.
中工作正常Type 'NSNotification.Name' has no member 'UITextField'
这是我的错误代码。
NotificationCenter.default.addObserver(forName: NSNotification.Name.UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
loginAction.isEnabled = textField.text != ""
}
完整代码:
@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
是 UITextField
(和 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
//...
}
在swift sdk中,所有的通知名称都应该是struct的扩展:Notification.Name
所以当使用Notification.Name时,你应该忽略Class名字(exc.UITextField),输入"Notification.Name."然后输入一些你的名字(比如"TextF" ) 并使用 esc 显示自动完成
我遇到了同样的问题,
这是最简单的解决方案:
而不是使用forName: NSNotification.Name.UITextField.textDidChangeNotification
在forName:
参数中这样使用:
NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main) { (notification) in
//Your code goes here...
}