gpt4 book ai didi

ios - B 的子类(从 A 类继承)可以从 A 的子类而不是 A 本身继承吗?

转载 作者:行者123 更新时间:2023-11-28 22:38:48 26 4
gpt4 key购买 nike

我正在为 iOS 应用程序开发辅助功能项目。因为可访问性并不像宣传的那样有效,所以我必须在子类中覆盖 accessibilityFrameaccessibilityActivationPointpointInside:withEvent 以扩展区域由 VoiceOver 识别(用于绘图和触摸识别)超出控件 View 的“自然”边界。因此,为了更改 UIButton 的 VoiceOver 边界,我必须对该类进行子类化,然后添加这三个方法。为了对 UILabel 执行此操作,我必须使用代码添加另一个子类,依此类推。

我可以将这些方法中的代码重构到一个中心位置,但我想知道是否可以通过继承更优雅地完成此操作。我想将此代码放入 UIView 的子类(可能称为 UIViewAccessible),然后创建 UIButton 的子类,称为 UIButtonAccessible 继承自 UIButton,后者又继承自 UIViewAccessible 而不是 UIView。这可能吗,或者类似的事情可以用一个类别来完成吗?

编辑:根据文档,您无法通过类别真正实现此目的:

If the name of a method declared in a category is the same as a method in the original class, or a method in another category on the same class (or even a superclass), the behavior is undefined as to which method implementation is used at runtime.

还有其他方法吗?

最佳答案

要回答您的问题,不,它不能,因为您的 UIViewAccessible 是继承链中 UIButton 的二级同级(均继承自 UIView 在某些时候)。但我想你已经知道了。至于解决方案,您可以围绕您的 UIView 可访问类包装一个装饰器,并使用强类型协议(protocol)。这样您就可以将代码保存在一个地方。我已经描述了这种技术 here更详细(虽然目的不同,但情况相同)。

对于支持可访问性的 View ,您必须这样做:

@property (nonatomic, strong) UIView<MyAccesibilityProtocol>* view;

//self.view can come from the nib or previously created in code
self.view = [[AccesibilityDecorator alloc] initWithDecoratedObject:self.view];

//you can then use self.view like any other UIView,
//and because it also implements an
//accessibility protocol, you can use the methods
//implemented in the wrapper as well.
//more than that, you can control which methods to override
//in the AccesibilityDecorator class
[self.view addSubview:otherView];//could be overridden or not
[self.view myAccesibilityMethod];//custom method declared in the protocol

关于ios - B 的子类(从 A 类继承)可以从 A 的子类而不是 A 本身继承吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com