ios – 使用特定类型覆盖UIViewController.view

ios – 使用特定类型覆盖UIViewController.view,第1张

概述让我们考虑具有高度自定义或复杂视图的应用程序. 我们将有一种特定类型的视图控制器发送方法到特定类型的UIView,其中UIView本身由许多其他视图组成. 该视图应具有丰富的特定于域的界面,允许控制器在其与类似的丰富模型之间进行 *** 作. 所以我们覆盖控制器的view属性,如下所示: @interface PlaybackViewController : UIViewController<StageL 让我们考虑具有高度自定义或复杂视图的应用程序.

我们将有一种特定类型的视图控制器发送方法到特定类型的UIVIEw,其中UIVIEw本身由许多其他视图组成.

该视图应具有丰富的特定于域的界面,允许控制器在其与类似的丰富模型之间进行 *** 作.

所以我们覆盖控制器的vIEw属性,如下所示:

@interface PlaybackVIEwController : UIVIEwController<StageLayoutDelegate,ControlPanelDelegate>{    NSMutableArray* _sections;    lightingMode _lightingMode;}@property (nonatomic,strong) PlaybackVIEw* vIEw; // <------ Specific type of vIEw#pragma mark - injected@property (nonatomic,strong) ID<OscclIEnt> oscclIEnt;@property (nonatomic,strong) AbstractStageLayoutVIEw* stageLayoutVIEw;@end

OvverrIDing对于定义另一个访问器是有意义的,我只需将消息发送到特定类型的UIVIEw而无需强制转换.

问题:唯一的问题是它会导致编译器警告:

属性类型’PlaybackVIEw *’与从’UIVIEwController’继承的类型’UIVIEw *’不兼容

. .我喜欢构建没有任何警告的代码.这样,有效的警告不会被埋没在其他警告之中.

题:

>有没有办法压制这个特别的警告?
>为什么这是默认设置的一部分,当大多数现代OO语言很乐意允许覆盖子类中的属性或方法,以便它返回超类中声明的类型的更具体的子类?

解决方法 这里的问题不是覆盖属性,而是使用类类型的前向声明.

所以这…

@class PlaybackVIEw;@interface PlaybackVIEwController : UIVIEwController@property (nonatomic,strong) PlaybackVIEw* vIEw;@end

会给你提到上面提到的警告,因为编译器无法知道PlaybackVIEw的继承层次结构. UIVIEwController有一个契约,从它的vIEw属性提供一个UIVIEw

它告诉你,它认为PlaybackVIEw不是UIVIEw

这里的简单解决方案是使用#import代替编译器完全了解PlaybackVIEw …

#import "PlaybackVIEw.h"@interface PlaybackVIEwController : UIVIEwController@property (nonatomic,strong) PlaybackVIEw* vIEw;@end

或者(但由于PCH是一种优化功能并且不应该管理依赖性,因此形式非常糟糕)是将#import“PlaybackVIEw.h”添加到您的项目PCH中

总结

以上是内存溢出为你收集整理的ios – 使用特定类型覆盖UIViewController.view全部内容,希望文章能够帮你解决ios – 使用特定类型覆盖UIViewController.view所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存