UIScrollView无法识别选择器setMaximumZoomScale:

时间:2013-03-05 05:12:21

标签: ios uiscrollview

我创建了三个文件:MyViewController.h,'MyViewController.m, MyViewController.xib. In the xib`文件我创建了一个UIScrollView作为根级元素,并与其文件所有者建立了所有必要的连接。

在我的.m文件中,我覆盖loadView方法以设置ScrollView的其他一些属性。

-(void)loadView{
   [super loadView];
   UIScrollView *tmp = (UIScrollView *)[self view];
   [tmp setMaximumZoomScale:3.0];      // crashed here
}

然而,代码在函数的最后一行崩溃了,日志说:

-[UIView setMaximumZoomScale:]: unrecognized selector sent to instance 0x1cda5d60

似乎tmp被识别为UIView,而不是UIScrollView,尽管有明确的演员。我的理解是[super loadView];将从xib文件加载视图并设置ViewController的视图。即使我将崩溃的代码行移动到viewDidLoad函数,它也无济于事。

编辑:

我在Apple的文档site:

中找到了类似的模式
- (void)viewDidLoad {

  [super viewDidLoad];

  UIScrollView *tempScrollView=(UIScrollView *)self.view;

  tempScrollView.contentSize=CGSizeMake(1280,960);

}

编辑2:

我有点缩小了问题。现在我已经将[self view]转换为viewDidLoad的代码移动了,只有当我覆盖loadView时才会出现错误。如果我添加

-(void)loadView{
  [super loadView];
}

将发生错误。如果我删除这三行,没有错误。但是对超级的呼唤是不是完全不同于完全没有压倒一切?为什么不同?

1 个答案:

答案 0 :(得分:0)

检查与文件所有者的连接的连接检查器是否与滚动视图...

相同

见下图...

enter image description here

然后将您的代码放在viewDidLoad ...

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView *tempScrollView=(UIScrollView *)self.view;
    [tempScrollView setMaximumZoomScale:3.0];

}

这对我来说很好。

编辑2:

-(void)loadView{
    [super loadView];

    UIScrollView *tempScrollView=(UIScrollView *)self.view;

    tempScrollView.contentSize=CGSizeMake(320,960);
    [tempScrollView setBackgroundColor:[UIColor grayColor]];
    [tempScrollView setMaximumZoomScale:3.0];

}

这对我来说也很好。