2016-01-21 78 views
0

我試圖實現的是一個視圖控制器,它可以使用可在兩個顯示選項之間切換的按鈕以列表形式和集合形式顯示項目。更改視圖控制器的根視圖以黑色視圖結束

所以我實現的是一個UIViewController,可以同時容納UITableViewUICollectionView

當此視圖控制器第一次加載時,UITableView顯示正常。但是當我按下切換按鈕(它只是將self.view更改爲UICollectionView)時,它僅以黑色視圖結束。

當我按下開關按鈕(再次,它只是將self.view更改爲之前的UITableView),然後我嘗試回到UITableView時,沒有任何反應。它只是保持黑色。

改變視圖控制器的根視圖後,我應該做些什麼嗎?

回答

0

不建議的行爲改變UIViewController過去的時間點的觀點,在這loadView被調用。你會希望你的視圖控制器在其生命週期中擁有一個持久的視圖。我會推薦以下其中一項。

  1. 分層上的您的視圖控制器的視圖頂部的表視圖/集合視圖。這樣你就不會與主要的底層視圖本身mon mon。
  2. 擁有兩個視圖控制器實例,一個具有表格,另一個具有集合視圖,並在這兩個實例之間進行交換。
+0

我剛剛發現,從上海華盈刪除'UIScrollView'導致'automaticallyAdjustsScrollViewInsets'打破設備時就像你說的一樣,我完全同意,改變視圖是不推薦的行爲,我應該把集合視圖和表視圖作爲'self.view'的子視圖實現,並使用'setHidden'來交換兩個顯示選項之間。 –

0

如果您只是切換self.view對象的subviews對象。

var tableView:UITableView? 
var collectionView:UICollectionView? 
var bounds = CGRectMake(0, 0, 320, 480) // frame of tableView 

func createTableView() -> UITableView{ 
    if(tableView == nil){ 
     tableView = UITableView(frame: bounds, style: .Plain) 
    } 
    tableView?.delegate = self 
    tableView?.dataSource = self 

    return tableView; 
} 

func createCollectionView() -> UICollectionView{ 
    if(collectionView == nil){ 
     collectionView = UICollectionView(frame: bounds, collectionViewLayout: CustomFlowLayout) 
    } 
    collectionView?.delegate = self 
    collectionView?.dataSource = self 
    return collectionView 
} 

func initializeViews{ 
    createTableView() 
    createCollectionView() 
    self.view.addSubView(tableView); 
    self.view.addSubView(collectionView); 
} 

func showTableView{ 
    collectionView?.hidden = true; 
    tableView?.hidden = false; 
} 

func showCollectionView{ 
    tableView?.hidden = true; 
    collectionView?.hidden = false; 
} 
0

沒關係!我已經試過了,得到了我想要的! :) 只需從超級查看中刪除,然後添加回來。

UIView *superview = self.view.superview; 
[self.view removeFromSuperview]; 
self.view = self.collectionView; 
[superview addSubview:self.view]; 
+0

嗯,事實證明,從視圖控制器消除滾動視圖打破了滾動視圖插圖當設備方向更改:( –

相關問題