是否可以从属于子类元素的子类访问超类中的属性?
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-classing
和 UIScrollView 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 element
在IB
中被子类化。顺便说一句,你对我投了反对票吗?【参考方案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:相对于该视图布局的视图。此视图是父视图的subview
。 UIView
和所有派生类都有这种层次关系。
超类:要扩展其功能以定义子类的类。您的子类继承了所有可见的属性和方法。
【讨论】:
我将一个元素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"
有更好的编译机会。
【讨论】:
那是我写这篇文章来举例的时候打错了。以上是关于是否可以从属于子类元素的子类访问超类中的属性?的主要内容,如果未能解决你的问题,请参考以下文章