ios – 如何使用string中的参数创建Selector

我正在使用 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
        }
    }

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...