【问题标题】:Use of string literal for Objective-C selectors is deprecated; use '#selector' instead [duplicate]不推荐在 Objective-C 选择器中使用字符串文字;改用“#selector”[重复]
【发布时间】:2016-10-10 19:14:27
【问题描述】:

我有以下代码:

 override func viewDidLoad() {
            super.viewDidLoad()
            //Looks for single or multiple taps.
            let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
            view.addGestureRecognizer(tap)
            // Do any additional setup after loading the view.
        }

func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

当运行应用程序时发生此错误,当错误修复工作发生另一个错误时

【问题讨论】:

    标签: ios xcode swift2


    【解决方案1】:

    由于 Swift 语言的更新,您收到此错误,请更改您的点击选择器:

    let tap = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
    

    确保方法dismissKeyboard在同一个视图控制器中,如果不是你需要做#selector(WhateverHasThatMethod.dismissKeyboard)

    另外,确保dismissKeyboard方法确实存在,它应该是这样的:

    func dismissKeyboard(){
        YourInputField.endEditing(true)
    }
    

    【讨论】:

    • 不工作我得到断点错误!
    • self Posting.LoginViewController 0x00000001556537c0 点击 UITapGestureRecognizer 0x00000001556537c0 UIKit.UIGestureRecognizer UIGestureRecognizer
    • 我已经用更多信息更新了对您问题的回答,我认为您可能错过了实际隐藏键盘的方法。
    • 谢谢你的帮助,但我得到同样的错误!
    • 我已经用我的函数更新了我的问题
    【解决方案2】:
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
    

    【讨论】:

      【解决方案3】:

      从 Swift 2.2 开始,改用这个: #selector(YourClass.dismissKeyboard)

      【讨论】:

        【解决方案4】:

        除了#selector,您还可以从以下链接中看到 Swift 2.2 的一些新变化:

        https://swift.org/blog/swift-2-2-new-features/

        在 Swift 2.2 中无法使用,但在 Swift 2.1 中可以使用

        override func viewDidLoad() {
            super.viewDidLoad()
        
            navigationItem.rightBarButtonItem =
                UIBarButtonItem(barButtonSystemItem: .Add, target: self,
                                action: "addNewFireflyRefernce")
        }
        
        func addNewFireflyReference() {
            gratuitousReferences.append("We should start dealing in black-market beagles.")
        }
        

        适用于 Swift 2.2 及更高版本

        override func viewDidLoad() {
            super.viewDidLoad()
        
            navigationItem.rightBarButtonItem =
                UIBarButtonItem(barButtonSystemItem: .Add, target: self,
                                action: #selector(addNewFireflyRefernce))
        }
        
        func addNewFireflyReference() {
            gratuitousReferences.append("Curse your sudden but inevitable betrayal!")
        }
        

        Swift 3.0 也即将推出:

        https://swift.org/blog/swift-3-0-release-process/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-30
          • 2014-04-21
          • 2018-11-03
          • 1970-01-01
          • 1970-01-01
          • 2012-10-30
          • 2013-05-21
          相关资源
          最近更新 更多