当前位置:  开发笔记 > IOS > 正文

如何覆盖UIViewController中的"view"属性?

如何解决《如何覆盖UIViewController中的"view"属性?》经验,为你挑选了2个好方法。

我有一个自定义UIViewController和自定义UIView.我想重写viewcontroller.view属性以返回MyCustomUIView.

现在我有:

@interface MyViewController : UIViewController {    
    IBOutlet MyView* view;
}

@property (nonatomic, retain) IBOutlet MyView* view;

这个编译但是我得到一个警告:属性'view'类型与超类'UIViewController'属性类型不匹配.

我该如何缓解此警告?



1> JosephH..:

@ lpaul7已经发布了一个链接到Travis Jeffery的博客作为评论,但它比所有其他答案更正确,它确实需要代码作为答案:

ViewController.h:

@interface ViewController : UIViewController

@property (strong, nonatomic) UIScrollView *view;

@end

ViewController.m:

@implementation ViewController

@dynamic view;

- (void)loadView {
  self.view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
}

@end

如果使用xib,而不是覆盖loadView更改视图控制器的根视图的类型并添加IBOutlet到属性.

有关更多详细信息,请参阅覆盖UIViewController的View属性,Done Right.



2> NilObject..:

简短的回答是你没有.原因是属性实际上只是方法,如果您尝试更改返回类型,则得到以下结果:

(UIView*)观点;

(MyView*)视图;

Objective-C中并没有允许返回类型协方差.

你可以做的是添加一个新的属性"myView",并简单地将它命名为"view"属性.这将减轻整个代码中的类型转换.只需将视图子类分配给view属性,一切都应该正常工作.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有