2012-07-30 84 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. 
}