最近的項目由於項目需要,涉及過多次在當前控制器上添加另一個控制器的View問題。這里做個筆記,為了方便,當前視圖控制器記為控制器1,添加的視圖記為控制器2
第一種情況:
1.首先,因為控制器2的視圖上有需要與用戶交互的需求,所以一定要設置2為1的子控制器
ViewController *vc2 = [[ViewController alloc]init];
[self addChildViewController:vc2];
ps:當有多個子視圖時還可能用到,子控制器的removeFromParentViewController方法
2.關於2的view的創建
因為view的創建涉及到2的viewdidload方法,所以在控制器1的方法里面不要再重新創建vc2的view,不然創建的是另一個對象。在這里只需要根據需要設計vc2的view的frame就可以了。如下:
vc2.view.frame = CGRectMake(0, 108, kScreenWidth, kScreenHeight-108);
第二種情況:
- 我們創建一個ZYTestViewController : UITableViewController
然后我們稍微實現以下tableview的數據源方法
就先別搞那么復雜先,就這樣完成了一個UITableViewController的創建
- 接下來我們把這個控制器的view添加到我們的主控制中(UIViewController)
然后我們看一下,是否有我們想要的效果:
我們是確實能將這個tableView添加上去了,但是出現了不能顯示數據的問題。
- 原因在於:我們的ZYTestViewController控制器死了,因為是一個局部變量,所以導致我們的數據不能顯示。造成一個控制的view還在,但是這個view的控制器死了,這個非常危險的一件事情。
- 所以我們就急迫的需要保住這個控制器,那么我們就需要對這個控制器進行強引用。
我們再看一下效果:
只有這樣才能顯示我們的Cell的數據
所以得出一個結論:只要view在,view所在的控制器必須得在,這樣才能保證view內部的數據和業務邏輯正常