是否可以从属于子类元素的子类访问超类中的属性?

Posted

技术标签:

【中文标题】是否可以从属于子类元素的子类访问超类中的属性?【英文标题】:Is it possible to access a property in the superclass from a subclass that belong to subclassed element? 【发布时间】:2013-06-19 08:18:15 【问题描述】:

我是 sub-classingUIScrollView element 以回应 previous 的问题建议。

在我的subclass 中,我有一些由触摸和键盘事件触发的方法。这些事件需要以各种方式与我的superview 中的变量进行交互。

我尝试通过_myVar.text = @"smth" 访问它们,但编译不成功。

我知道我可以使用NSNotifications 来回播放,但是有没有办法从我的UISCrollView subclass 访问我的superview / class 中的变量?

我试过self.myVar = @"" 但它说它没有被识别。我将UIScrollView element 子类化,但我持有所有变量的观点是UIViewController。只是 UISCroll 元素被子类化了

【问题讨论】:

【参考方案1】:

你的超类中的所有 @property 都可以在你的子类中访问,但不能以其他方式访问

【讨论】:

当我在子类中使用 _myVar 时,它不会编译 @JonathanThurft 因为这是一个实例变量而不是属性。如果您的知识不足以理解答案,则无需投反对票。 @H2CO3 我没有降级。但是我已经使用_myVar 从我的UIScroller 子视图访问使用@property 声明的属性,但它没有工作 @JonathanThurft 它也不必工作。属性将使用 accessor 方法(或点语法,它只是前者的语法糖)来访问。 @H2CO3 我试过self.myVar = @"",但它说它没有被识别。我将UIScrollView element 子类化,但我持有所有变量的观点是UIViewController。只是UISCroll elementIB 中被子类化。顺便说一句,你对我投了反对票吗?【参考方案2】:

听起来你在这里有点困惑。你确定你在谈论superview?还是您在谈论派生子类的超类?如果是 superview,并且如果你知道 superview 的类型,获取一个指向它的指针,将它转换为适当的类类型,然后调用它的方法或访问它的可见属性。

UIButton* superButton = (UIButton*)[self superview];
superButton.visible = NO; // Assign to superview property

如果您谈论的是超类(在您的情况下为 UIScrollView),那么当然可以使用它的任何可见方法和属性。

self.bounces = YES; // Assign to superclass property

如果不清楚区别是什么,您真的应该多阅读一些有关 Objective-C 和面向对象编程的基础知识。

Superview:相对于该视图布局的视图。此视图是父视图的subviewUIView 和所有派生类都有这种层次关系。 超类:要扩展其功能以定义子类的类。您的子类继承了所有可见的属性和方法。

【讨论】:

我将一个元素 UIScrollView 子类化,以便它处理事件触发器。所以所有功能都在我的主类中,即UIViewController 通常你不应该尝试访问拥有来自UIView(或某种类型的UIView)的视图的UIViewController。这就是为什么它的名称中有“控制器”——它应该进行控制(但这条规则有详细的理由)。如果您尝试识别UIScrollView 上的点击,请尝试使用UIViewController 中的UITapGestureRecognizer 并将其附加到UIScrollView。我找不到其他问题,人们告诉你做你现在想做的事情,但我认为他们没有给你很好的建议。 @IdIes UIScrollView取消触摸***.com/questions/17179446/… 我仍然不清楚你想要完成什么。向我解释当用户与 UIScrollView 交互时您希望发生什么。 基本上我将我的UIKeyboardNotification(隐藏|显示)放在我的子类中。然后我将使用它,以便InputFields 始终显示在键盘上方。鉴于通知处理程序在子类中,我需要找到一种方法来访问 UIViewController 类中的变量。查看我的其他帖子,那里更清楚【参考方案3】:

这么多的困惑,从哪里开始?我真的不知道。物有所值,

_myVar.text = "@"smth"

显然不会编译,注意流浪“。

_myVar.text = "@smth"

有更好的编译机会。

【讨论】:

那是我写这篇文章来举例的时候打错了。

以上是关于是否可以从属于子类元素的子类访问超类中的属性?的主要内容,如果未能解决你的问题,请参考以下文章

php父类中访问子类的静态属性

是否可以在 C++ 中的超类中拥有子类的成员

爪哇 |父类和子类中的静态变量|从父类访问子 var 值

Symfony2 从超类确定和访问子类

接口访问权限

是否可以强制超类中的非常量虚拟方法优先于子类中同名的 const 方法?