更改self.view的类类型

时间:2012-07-30 16:29:30

标签: objective-c ios uiscrollview

我现在有一个应用程序用于测试,几乎完全完成 - 只剩下一些bug修复。不幸的是,客户决定他们希望应用程序的整个主页位于滚动视图内(这样底部的桌子就有更多的空间)。我已经完成了所有设置,我真的不想移动所有内容并更改引用。有没有一种简单的方法可以将主视图的类更改为滚动视图?我已经尝试在IB中更改类并在init方法中设置类类型。如果没有,我可能只是将视图的顶部部分抛出到nib文件中并将其加载为自定义单元格。

-EDIT - 我最终改变了IB中的类类型然后再做

[(UIScrollView *) self.view setScrollEnabled:YES];
[(UIScrollView *) self.view setContentSize:CGSizeMake(0,2000)];
viewDidLoad中的

。感谢您的帮助,希望我能接受您的所有答案。

4 个答案:

答案 0 :(得分:1)

当您提到[self view]时,我将假设您在视图控制器中的意思。视图控制器的视图可以是从UIView派生的任何视图。因此,滚动视图是完全可以接受的。

I don't really want to move everything and change references.
你需要搬家的是什么?你为什么要改变参考?您需要做的只是向视图控制器添加滚动视图,将视图控制器视图设置为它,并将当前视图作为子视图添加到新的滚动视图。不需要更改引用,不需要移动任何引用。

答案 1 :(得分:1)

请参阅视图控制器文档中的loadView 方法。

这是一个简单的(未经测试的!)示例

- (void)loadView {
   UIScrollView *scrollView = [[UIScrollView alloc] init] autorelease];

   //Set the properties of scrollview appropriately....

   self.view = scrollView;
 }

现在,视图控制器的根视图将是滚动视图。

注意的 - 如文档所述,如果使用界面构建器初始化视图/视图控制器,请不要这样做。如果不是这样的话,我无法从你的描述中看出来。如果是,您应该能够在界面构建器中更改视图类型。

答案 2 :(得分:1)

您需要设置滚动视图的contentSize属性。

由于您使用的是IB,最简单的方法是将所有UI元素放入视图中,并将此单个视图添加到滚动视图中。在viewDidLoad方法中,将scrollview的内容大小设置为与包含所有UI的视图相同的大小。

顺便说一句,除了走视图层次结构之外,还有更简单的方法来引用视图,就像你似乎正在做的那样。 viewcontroller.view.something.tableview。从IB中的视图控制器添加到tableview的连接,并且视图层次结构中该tableview的位置无关紧要。无论你如何重新排列你的笔尖,你总能从viewcontroller.tableview到达它。

答案 3 :(得分:0)

我认为你必须使用具有正确类型的指针。 Google地图的示例:假设您已将基本视图的类更改为GMSMapView

<强> MapViewController.h

@property GMSMapView *mapView;

<强> MapViewController.m

-(void)awakeFromNib{
    [super awakeFromNib];
    self.mapView = (GMSMapView*)self.view;
    // ... etc.
}