我擁有適用於我的應用程序的主控細節控制器。主控制器是一個UITabBarController,每個選項卡都是一個包含不同類型數據的UITableViewController。iOS中的主/細節視圖中的子視圖管理(帶ARC)
我打算在主細節視圖上有一個主標題/圖像,但隨後需要向主細節視圖添加不同的子視圖,以根據我使用的標籤詳細說明特定信息。
我目前加入相關子視圖在我
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
功能,像這樣:
UIViewController *subview = [[UIViewController alloc] initWithNibName:@"ItemNotFoundViewController" bundle:nil];
subview.view.frame = CGRectMake(20, 160, subview.view.frame.size.width, subview.view.frame.size.height);
[self.detailViewController.view addSubview:subview.view];
但是,我認爲,這是一個做事的好辦法 - 每次有人點擊一個表格單元格時,另一個子視圖將被拋出在先前添加的子視圖堆棧的頂部,從而產生內存問題。
我想知道的是,ARC是否幫我照顧過嗎?我的方法是否可以通過?即使它是可以通過的,有沒有更好的方法來做到這一點?
好吧,我跟着 - 但是,我改變了代碼'[self.detailViewController.view addSubview:subview.view];'''self.detailViewController setView:subview.view]'。這是否工作,而不是重新分配整個控制器? – Darrrrrren
也許它確實,也許它沒有。我知道這是一個可怕的答案,但事實是,你真的不應該那樣做。正如蘋果在多個場合中明確指出的那樣:視圖控制器擁有並管理它的視圖,**不會帶走它的視圖**或者會發生不好的事情(即抓取它並將其放入另一個視圖控制器)。花點時間閱讀一下「UISplitViewController」的正確用法,從長遠來看,它將爲您節省很多麻煩。蘋果還表示,他們可能會在將來創建他們稱之爲不一致的層次結構時開始拋出異常。 – Tobi
好的。我唯一的理由是,當替換整個控制器時,即使執行'[subviewController setNeedsDisplay]',我的視圖也拒絕更新。做上面剛剛問到的問題,實際上正確地刷新了視圖。 – Darrrrrren