【问题标题】:How can I solve the "Method does not override any method from its superclass" error?如何解决“方法不会覆盖其超类中的任何方法”错误?
【发布时间】:2016-01-03 17:42:18
【问题描述】:

我试图通过“shouldPerformSegueWithIdentifier”覆盖函数进行一种条件转场,它报告错误“方法没有覆盖其超类中的任何方法”并告诉我删除“覆盖”字样。当我这样做时,它会报告下一个错误:

“方法 'shouldPerformSegueWithIdentifier(:sender:)' 与 Objective-C 选择器 'shouldPerformSegueWithIdentifier:sender:' 与超类 'UIViewController' 中的方法 'shouldPerformSegueWithIdentifier(:sender:)' 冲突Objective-C 选择器”。

这是我现在的代码:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
//MARK: Propierties
@IBOutlet weak var whateverLabel: UILabel!
@IBOutlet weak var errorMessageLabel: UILabel!
@IBOutlet weak var textFieldRandomWord: UITextField!
//MARK: Actions
@IBAction func printWhatever(sender: UIButton) {whateverLabel.text = "Whatever"
    }

@IBOutlet weak var goOnButton: UIButton!

 override func shouldPerformSegueWithIdentifier(identifier: String, sender: UIButton?) -> Bool {
    if identifier == "firstsegue" && sender == goOnButton { // you define it in the storyboard (click on the segue, then Attributes' inspector > Identifier

        if textFieldRandomWord.text == "Whatever" {
            errorMessageLabel.textColor = UIColor .redColor()
            errorMessageLabel.text = "*** NOPE, segue wont occur"
            return false
        }
        else {
            errorMessageLabel.text = "*** YEP, segue will occur"
        }
    }

    // by default, transition
    return true
    }
override func viewDidLoad() {
    super.viewDidLoad()
textFieldRandomWord.delegate = self //ViewController is textFieldRandomWord's delegate, so "self" reffers to itself (ViewController)//
}
//MARK: UITextFieldDelegate
     func textFieldShouldReturn(textField: UITextField) -> Bool {
//Hide the keyboard.
    textFieldRandomWord.resignFirstResponder()
    return true}
func textFieldDidEndEditing(textField: UITextField){
   whateverLabel.text = textFieldRandomWord.text}
//Above, the textFieldShouldReturn function makes the text field inactive when return (enter) is pressed. The last function gets activated automatically when this happens.//
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    sender 应该是 AnyObject?。您不能更改方法声明中的类型以适应您当前的需求。如果你的senderUIButton,你必须检查函数内部。

    【讨论】:

    • 但是我怎样才能让整个功能被我想要的按钮触发(“goOnButton”)?
    • 我可以通过将函数放在按钮的动作函数中并删除“sender == goOnButton”部分来实现吗?
    • 您可以将 IBAction 方法添加到调用performSegueWithIdentifier:sender 方法的按钮。然后你应该重写 prepareForSegue:sender 方法以在 segueing 之前准备好一切。
    • 那么,我应该把 prepareForSegue 方法具体放在哪里?
    • 例如在您的printWhatever 方法中(我假设它已连接到您的goOnButton
    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多