我有一个自定义UIViewController和自定义UIView.我想重写viewcontroller.view属性以返回MyCustomUIView.
现在我有:
@interface MyViewController : UIViewController { IBOutlet MyView* view; } @property (nonatomic, retain) IBOutlet MyView* view;
这个编译但是我得到一个警告:属性'view'类型与超类'UIViewController'属性类型不匹配.
我该如何缓解此警告?
@ 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.
简短的回答是你没有.原因是属性实际上只是方法,如果您尝试更改返回类型,则得到以下结果:
(UIView*)观点;
(MyView*)视图;
Objective-C中并没有允许返回类型协方差.
你可以做的是添加一个新的属性"myView",并简单地将它命名为"view"属性.这将减轻整个代码中的类型转换.只需将视图子类分配给view属性,一切都应该正常工作.