Kei*_*ald 28 iphone cocoa-touch uiviewcontroller uiview
我有一个自定义UIViewController和自定义UIView.我想重写viewcontroller.view属性以返回MyCustomUIView.
现在我有:
@interface MyViewController : UIViewController {
IBOutlet MyView* view;
}
@property (nonatomic, retain) IBOutlet MyView* view;
Run Code Online (Sandbox Code Playgroud)
这个编译但是我得到一个警告:属性'view'类型与超类'UIViewController'属性类型不匹配.
我该如何缓解此警告?
Jos*_*phH 23
@ lpaul7已经发布了一个链接到Travis Jeffery的博客作为评论,但它比所有其他答案更正确,它确实需要代码作为答案:
ViewController.h:
@interface ViewController : UIViewController
@property (strong, nonatomic) UIScrollView *view;
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m:
@implementation ViewController
@dynamic view;
- (void)loadView {
self.view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
}
@end
Run Code Online (Sandbox Code Playgroud)
如果使用xib,而不是覆盖loadView更改视图控制器的根视图的类型并添加IBOutlet到属性.
有关更多详细信息,请参阅覆盖UIViewController的View属性,Done Right.
Nil*_*ect 18
简短的回答是你没有.原因是属性实际上只是方法,如果您尝试更改返回类型,则得到以下结果:
Objective-C中并没有允许返回类型协方差.
你可以做的是添加一个新的属性"myView",并简单地将它命名为"view"属性.这将减轻整个代码中的类型转换.只需将视图子类分配给view属性,一切都应该正常工作.