1

一些视图.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......

参考:原始源代码

4

4 回答 4

1

因为self.view是一个UIView,你需要将它投射到你的SomeView

所以,

SomeView *someView = self.view;会给你一个警告所以你施放它

SomeView *someView = (SomeView *)self.view;

它不是魔法,它只是转换UIViewto SomeViewself.view被定义为UIView 但它是一个类的实例SomeView,所以为了使用SomeView函数,你需要转换它

于 2012-06-27T06:48:11.233 回答
1

这实际上是从self.viewtoSomeView到访问功能的类型转换SomeView

由于您的视图控制器已经加载SomeView,但self.view将返回的实例UIView,这就是为什么需要对它进行类型转换以避免警告的原因。

于 2012-06-27T06:49:13.567 回答
1

首先,您的问题不适用于原始来源的上下文。

那里的控制器视图由 IB 在storyboard中明确设置。这意味着self.view设置为自定义SomeView类,但编译器不知道!这就是它被铸造的原因。

所以它对编译器来说看起来很简单UIView,但实际上SomeView它需要访问它的方法(所以我们告诉编译器'不要担心这是一个 SomeView,继续这样对待它')。我希望这是有道理的。

PS。您必须下载实际项目才能查看实际情况,因为答案可以在情节提要中找到

于 2012-06-27T07:58:36.757 回答
0
[(SomeView *)self.view setPage:1];

这意味着您的 self.view 是 SomeveView 的类型

SomeView *someVw = [[SomeView alloc]init];
self.view = someVw;
于 2012-06-27T06:49:55.937 回答