2012-07-30 83 views
0

我现在有一个应用程序用于测试,几乎完成了 - 只剩下一些错误修复。不幸的是,客户决定他们希望应用程序的整个主页面位于滚动视图的内部(以便底部的表格有更多空间)。我已经设置了一切,我不想移动所有内容并更改引用。有没有简单的方法将主视图的类更改为滚动视图?我已经尝试在IB中更改班级并在init方法中设置班级类型。如果没有,我可能会把视图的顶部放到一个nib文件中,并将其加载为一个自定义单元格。更改self.view的类类型

CNC中我最终改变IB类的类型,然后做

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

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

回答

1

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

I don't really want to move everything and change references. 

你将不得不移动什么?你为什么要改变参考?只有你需要做的是为你的视图控制器添加一个滚动视图,设置视图控制器视图,并将当前视图作为子视图添加到新的滚动视图。不需要更改任何参考,也不需要移动任何参考。

+0

的原因,我不希望这样做是因为这是一个巨大的,有点建立不良项目 - 主要是因为持续的设计变更与此类似。我不想让scrollview成为顶层视图(在原始视图上方),因为很多其他类引用了主视图控制器的视图层次结构。这就是为什么我正在寻找一种方法来更改顶级控制器的类并保留当前的层次结构。 – Dustin 2012-07-30 16:44:31

+0

您可以将您的顶视图更改为uiscrollview,而不会出现任何问题。根据你所说的,这听起来像你有''[[viewcontroller views] objectAtIndex:0]'',如果是这样的话,我的宙斯怜悯你的灵魂。 – ColdLogic 2012-07-30 17:02:18

+0

我改变了它,但它不滚动,所以我有点怀疑它实际上是一个滚动视图。我没有'[[viewcontroller views] objectAtIndex:0]'但我确实有'viewcontroller.view.tableview'和'self.view.textfield'之类的东西。所以如果我添加一个滚动视图,我不得不添加一个对内部视图的引用并执行'viewcontroller.view.something.tableview'。因为我的项目是大约80亿LOC,所以我不想去寻找所有这些参考。 – Dustin 2012-07-30 17:07:04

1

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

下面是一个简单的(未经测试!)例如

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

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

    self.view = scrollView; 
} 

现在您的视图控制器将是一个滚动视图的根视图。

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

+0

我正在使用IB。如果我在IB中更改视图类型,它仍然不会滚动。 – Dustin 2012-07-30 17:11:31

+0

我发现这篇文章https://discussions.apple.com/thread/1996598?start=0&tstart=0并没有读取所有内容,但可能有所帮助,请检查一下 – Mike 2012-07-30 17:16:51

+0

另外,请确保你设置的contentSize大于屏幕使scrollView可滚动 – Mike 2012-07-30 17:17:35

1

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

由于您使用IB,最简单的方法是将所有UI元素放入视图中,并将此单一视图添加到滚动视图中。在viewDidLoad方法中,将scrollview的内容大小设置为与包含所有UI的视图相同的大小。另外,如您所做的那样,引用视图的方法比沿着视图层次结构走路的方式要简单得多。 viewcontroller.view.something.tableview。在IB中从视图控制器添加一个到tableview的连接,并且这个tableview在视图层次结构中的位置并不重要。无论您如何重新排列您的笔尖,您始终都可以从viewcontroller.tableview达到此目标。

0

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

MapViewController。^ h

@property GMSMapView *mapView; 

MapViewController.m

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