- [UIView setContentSize:]:无法识别的选择器发送到实例0x16d3be60

时间:2014-08-29 12:32:55

标签: ios objective-c iphone uiview uiscrollview

我正在关注Apple的Scroll View Programming Guide for iOS。它接缝非常简单,但我收到了这个错误:

-[UIView setContentSize:]: unrecognized selector sent to instance 0x16d3be60 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setContentSize:]: unrecognized selector sent to instance 0x16d3be60'

我按照在Interface Builder中创建滚动视图中的步骤进行操作。很明显self.view属于UIView类型,应该是UIScrollView。我控制+从控制器拖动到滚动视图,如教程中所示,似乎滚动视图在此控制器中注册为视图,如下面的屏幕截图所示:

enter image description here

我尝试在View中单击“x”,因此Scroll View只能在控制器中查看,但不起作用(因为灰显表示)。

我错过了什么?

顺便说一句,这是崩溃的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Setup scroll size
    UIScrollView *view = (UIScrollView*)self.view;
    view.contentSize = CGSizeMake(self.view.frame.size.width, 960);
}

2 个答案:

答案 0 :(得分:4)

我会在创建全新 UIViewController之后执行此操作:

自定义类基本上是UIView的一个实例。

before

之后

我已将自定义类明确更改为UIScrollView,这几乎就是工作,您需要实现它。

after


从那时起,您可以在类中投射并使用self.view作为UIScrollView,因为它是UIScrollView实例。



更新属性检查器

基本上该解决方案不会更新最初创建的xib文件的XML标记,并且只能通过属性检查器将其识别为UIView。< / p>

如果是全新的视图,您可以将新的UIScrollView拖放到xib文件中,可以正确地将它连接到文件的所有者view,例如:

re-connent the view property

正确的结果:

the scrollview is the new one

之后可以删除原始视图,因为它不再连接到文件的所有者

高级模式

如果您的视图中已经有很多子视图,那么使用上面提到的关于交换视图的轻松解决方案,复制粘贴方式可能对您不起作用 - 您可以建立完全联系使用XML文件 - ,如果您觉得有足够的经验并且有足够的信心手动编辑该文件! 如果您有任何疑问,请勿触摸或编辑直接XML文件!

如果是,则您需要仅将view更改为scrollView,例如:

view-tag scrollView-tag


在进行任何更改后,属性检查器会将视图视为 UIScrollView

答案 1 :(得分:1)

您在此声明中使用的强制转换运算符:UIScrollView *view = (UIScrollView*)self.view;不会将UIView实例转换为UIScrollView实例。 将.xib / .storyboard中的滚动视图添加到视图控制器的视图中,并为其添加插座。