@override报错方法未从其超类重写方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@override报错方法未从其超类重写方法?相关的知识,希望对你有一定的参考价值。

参考技术A 如果你实现某个接口,必须重写该接口中的所有方法。

iOS - 从其超类设置 UIButton 目标和操作

【中文标题】iOS - 从其超类设置 UIButton 目标和操作【英文标题】:iOS - set UIButton target and action from its super class 【发布时间】:2013-06-24 12:45:17 【问题描述】:

我有 2 节课 A类:UIView ClassB:UIViewController

我在 ClassA 中有一个 UIButton

按钮在标题中声明为 A 的 @property

UIButton *selectBtn;    

@property (nonatomic, strong) UIButton *selectBtn;

在 Class A 的 .m 文件中,按钮被初始化并显示在屏幕上

ClassB 导入 ClassA 的头文件,我正在尝试使用以下内容为我的按钮设置目标和操作

[ClassA.selectBtn addTarget:self action:@selector(getSomething:)     forControlEvents:UIControlEventTouchUpInside];

但我不断收到一条错误消息说 “在“ClassA”类型的对象上找不到属性“selectBtn”

我做错了什么? 非常感谢任何帮助或指导

【问题讨论】:

【参考方案1】:
[ClassA.selectPicBtn addTarget:self action:@selector(getSomething:)     forControlEvents:UIControlEventTouchUpInside];

使用 selectPIcBtn 代替 selectBtn

【讨论】:

您好,观察结果很好,但还是没用。 . .任何其他想法。 . .仍然有同样的问题。 . . (我还在上面的问题中编辑了代码) - 不过我会为你的努力表示支持:谢谢 我没有发现任何其他问题。你合成属性了吗?【参考方案2】:

我不知道我是否遗漏了什么,因为其他海报都没有提到这一点,但据我所知,selectBtn 是 ClassA 实例的属性,而不是类本身的属性。尝试抓取 ClassA 对象的实例,然后从该实例访问属性:

//WRONG
[ClassA.selectBtn addTarget:self action:@selector(getSomething:) forControlEvents:UIControlEventTouchUpInside];

//Correct
ClassA *aClassAObject = [[ClassA alloc] init];
[aClassAObject.selectBtn addTarget:self action:@selector(getSomething:) forControlEvents:UIControlEventTouchUpInside];

请记住,上面的代码只是一个示例,不太可能是您要查找的对象。如果您在 ClassB 对象中执行此操作,则必须获取 ClassB UIViewController 正在使用的 ClassA UIView。通常,我会在 ClassB 中创建一个属性来访问 ClassA 对象,类似于为 UIButton 对象创建属性的方式,但我不确定在没有看到头文件的情况下如何设置类。

【讨论】:

【参考方案3】:

问题来了。

UIButton *selectBtn;    

@property (nonatomic, strong) UIButton *selectPicBtn;

selectBtn 和 selectPicBtn 是不同的。属性名称应与变量名称相同。如果你已经声明了一个属性,那么你就不需要声明变量了。

只声明属性并使用它。初始化时,在Class A中初始化self.selectPicBtn = [UIButton....

【讨论】:

摆脱了按钮声明,仍然没有成功:(

以上是关于@override报错方法未从其超类重写方法?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 错误 - 方法不覆盖其超类中的任何方法

Java继承方法隐藏(覆盖)

supportedInterfaceOrientations 方法不会覆盖其超类中的任何方法

“方法不会覆盖其超类中的任何方法”Swift 3 [重复]

方法不会覆盖其超类 swift 3.0 错误中的任何方法 [重复]

重写(override)与重载(overload)的区别