更改视图控制器的根视图以黑色视图结束

问题描述:

我试图实现的是一个视图控制器,它可以使用可在两个显示选项之间切换的按钮以列表形式和集合形式显示项目。更改视图控制器的根视图以黑色视图结束

所以我实现的是一个UIViewController,可以同时容纳UITableViewUICollectionView

当此视图控制器第一次加载时,UITableView显示正常。但是当我按下切换按钮(它只是将self.view更改为UICollectionView)时,它仅以黑色视图结束。

当我按下开关按钮(再次,它只是将self.view更改为之前的UITableView),然后我尝试回到UITableView时,没有任何反应。它只是保持黑色。

改变视图控制器的根视图后,我应该做些什么吗?

不建议的行为改变UIViewController过去的时间点的观点,在这loadView被调用。你会希望你的视图控制器在其生命周期中拥有一个持久的视图。我会推荐以下其中一项。

  1. 分层上的您的视图控制器的视图顶部的表视图/集合视图。这样你就不会与主要的底层视图本身mon mon。
  2. 拥有两个视图控制器实例,一个具有表格,另一个具有集合视图,并在这两个实例之间进行交换。
+0

我刚刚发现,从上海华盈删除'UIScrollView'导致'automaticallyAdjustsScrollViewInsets'打破设备时就像你说的一样,我完全同意,改变视图是不推荐的行为,我应该把集合视图和表视图作为'self.view'的子视图实现,并使用'setHidden'来交换两个显示选项之间。 –

如果您只是切换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; 
} 

没关系!我已经试过了,得到了我想要的! :) 只需从超级查看中删除,然后添加回来。

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

嗯,事实证明,从视图控制器消除滚动视图打破了滚动视图插图当设备方向更改:( –