2013-03-05 81 views
-1

我创建了三个文件:MyViewController.h,“我创造了一个的UIScrollView作为根级元素MyViewController.m, MyViewController.xib. In the xib`文件,并作出其文件所有者所有必需的连接。UIScrollView中无法识别的选择setMaximumZoomScale:

在我的.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]; 
} 

将发生错误。如果我删除这三行,没有错误。但是,这不是超级完全一样的调用吗?为什么区别?

+0

你在哪里创建UIScrollView? – NANNAV 2013-03-05 05:27:06

+0

如果你从一个笔尖加载,通常你不会重载'loadView'。通常这些东西在'viewDidLoad'中设置。 – 2013-03-05 05:29:16

+0

UIScrollView是在xib文件中创建的。我使用标准步骤从xib文件创建视图。 – topduo 2013-03-05 05:47:06

回答

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]; 

} 

这也是工作对我罚款。

+0

为什么来自'[自我观点]的演员阵容将无法工作? – topduo 2013-03-05 05:50:15

+0

默认情况下,文件所有者包含UIView类型的视图,而UIScrollView仅从UIView派生。所以最好为滚动视图创建另一个iboutlet来访问它。 – 2013-03-05 06:00:07

+0

请参阅我的编辑。我发现Apple使用这个转换来访问ScrollView,所以这不应该是一个问题(至少不是唯一的问题)。 – topduo 2013-03-05 06:10:04

相关问题