【问题标题】: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 元素被子类化了

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案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取消触摸stackoverflow.com/questions/17179446/…
    • 我仍然不清楚你想要完成什么。向我解释当用户与 UIScrollView 交互时您希望发生什么。
    • 基本上我将我的UIKeyboardNotification(隐藏|显示)放在我的子类中。然后我将使用它,以便InputFields 始终显示在键盘上方。鉴于通知处理程序在子类中,我需要找到一种方法来访问 UIViewController 类中的变量。查看我的其他帖子,那里更清楚
    【解决方案3】:

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

    _myVar.text = "@"smth"
    

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

    _myVar.text = "@smth"
    

    有更好的编译机会。

    【讨论】:

    • 那是我写这篇文章来举例的时候打错了。
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2019-04-02
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多