SomeView.h
@interface SomeView : UIScrollView <UIScrollViewDelegate>
- (void)setPage:(int)page;
@end
SomeViewController.h
@interface SomeViewController : UIViewController
@end
SomeViewController.m
#import "SomeView.h"
#import "SomeViewController.h"
- (void)viewDidLoad
{
[super viewDidLoad];
[(SomeView *)self.view setPage:1];
}
(SomeView *)self.view
的含义是什么?
在实际代码中,似乎正在继承从SomeView
到self.view
的功能......
参考:原始source code。
答案 0 :(得分:1)
由于self.view
是UIView
,您需要将其投放到SomeView
所以,
SomeView *someView = self.view;
会给你一个警告
所以你施展它
SomeView *someView = (SomeView *)self.view;
它不是魔术,它只是将UIView
转换为SomeView
,self.view
定义为UIView
但它是SomeView
类的一个实例,所以为了使用SomeView
函数,你需要将它强制转换
答案 1 :(得分:1)
这实际上是从self.view
到SomeView
的类型转换,以访问SomeView
的功能。
由于您的视图控制器已加载SomeView
,但self.view
将返回UIView
的实例,因此需要对其进行类型转换以避免出现警告。
答案 2 :(得分:1)
首先,您的问题不适用于原始来源的上下文。
控制器的视图由IB在故事板中明确设置。这意味着self.view
被设置为自定义SomeView
类,但编译器不知道这一点!这就是它被铸造的原因。
所以它看起来像编译器的普通UIView
,但实际上是SomeView
需要访问它的方法(所以我们告诉编译器'不要担心这是一个SomeView,去吧并且像这样对待它')。我希望这是有道理的。
PS。您必须下载实际项目以查看实际情况,因为答案可以在故事板中找到
答案 3 :(得分:0)
[(SomeView *)self.view setPage:1];
这意味着你的self.view是SomeveView的类型
SomeView *someVw = [[SomeView alloc]init];
self.view = someVw;