我正在使用
Swift 3.1和Xcode 8.3.3编写程序.我想创建一个类,负责在键盘出现和消失时移动整个视图.但是我在使用字符串参数创建自定义选择器时遇到了困难.要显示或隐藏键盘我们需要功能:
func keyboardWillShow(notification: Notification) { //Code moving view when keyboard appears }
我正在尝试创建一个这样的选择器:
let selector = Selector(("keyboardWillShow") NotificationCenter.default.addobserver(view,selector: selector,name: .UIKeyboardWillShow,object: anyView.view.window)
它正在编译,但是当键盘出现时,它会崩溃.
因为它是独立的类我不能使用这种结构:
#selector(keyboardWillShow)
因为它将Swift函数转换为Objective-C函数(添加@objc).
所以问题是:如何用参数字符串创建一个Selector表单?
P. S.我可以将整个代码放在那里,但我不希望问题非常大,所以我会编辑问题,如果有人问…
解决方法
Here is what you want,Selector with string type and Notification parameter argument
斯威夫特4
NotificationCenter.default.addobserver(self,selector: Selector(("showKeyboard:")),name:NSNotification.Name.UIKeyboardWillShow,object: nil) var keyboardHeight = 0.0 //------------------- @objc func showKeyboard(_ sender: Notification) { keyboardWillShow(sender: sender as NSNotification,adjustHeight: 150) print("sender - \(sender)") } //------------------- func keyboardWillShow(sender: NSNotification,adjustHeight: CGFloat) { if let keyboardSize = (sender.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { keyboardHeight = Double(keyboardSize.height) // do your calculations } }
斯威夫特3
NotificationCenter.default.addobserver(view,selector: Selector(("keyboardWillShow:")),object: anyView.view.window) func keyboardWillShow(_ notification: Notification) { keyboardWillShow(sender: sender as NSNotification,adjustHeight: 150) print("sender - \(sender)") }
根据语言支持,这是普通的选择器
斯威夫特4
NotificationCenter.default.addobserver(self,selector: #selector(self.showKeyboard(sender:)),object: nil) var keyboardHeight = 0.0 //------------------- @objc func showKeyboard(sender: NSNotification) { keyboardWillShow(sender: sender,adjustHeight: 150) } //------------------- func keyboardWillShow(sender: NSNotification,adjustHeight: CGFloat) { if let keyboardSize = (sender.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { keyboardHeight = Double(keyboardSize.height) // your operations here } }
斯威夫特3
NotificationCenter.default.addobserver(self,object: nil) var keyboardHeight = 0.0 //------------------- func showKeyboard(sender: NSNotification) { keyboardWillShow(sender: sender,adjustHeight: 150) } //------------------- func keyboardWillShow(sender: NSNotification,adjustHeight: CGFloat) { if let keyboardSize = (sender.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { keyboardHeight = Double(keyboardSize.height) // your operations here } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。