2012-05-07 25 views
0

什麼我迄今所做的:遞歸實例化時故事板中的UI元素和IBOutlet變量?

我使用的Xcode 4.2。我創建了一個包含ImageView的UITableView。 UITableView使用具有文件MyTableViewController.m/.h的MyTableViewController類。我創建了一個名爲_bgimageview的IBOutlet變量。然後在故事板中,在連接檢查器中,我將ImageView連接到這個_bgimageview變量。在MyTableviewController.m的viewDidLoad函數中,我將背景圖像設置爲_bgimageview。當我運行模擬器時,點擊幾個選項卡可以訪問MyTableViewController,然後看到背景圖像。事情迄今爲止效果很好。

問題

我也成功地建立了一個遞歸樹,但問題是,我的樹的根級別後失去backgorund圖像。我想我知道爲什麼,但不知道如何解決。我實例上的每個新的MyTableViewController行單擊像這樣:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     MyTableViewController *childView = [[MyTableViewController alloc] init]; 
     childView._menu = children; // an NSDictionary of children 
     [self.navigationController pushViewController:childView animated:YES]; 
} 

正如前面提到的,我填充在viewDidLoad中功能backgruond圖像IBOutlet中的變量。但是,IBOutlet變量通過故事板連接連接到ImageView。在根級別以下的樹級別中,我編程實例化新的MyTableViewControllers,因此,我可能會失去後端圖像的IBOutlet變量與故事板中提到的實際UIImageView之間的關係。

有人可以重新向我保證,這是問題,以及如何在以分層方式使用時向MyTableViewController添加backgorund圖像?

+1

如果您正在使用故事板,爲什麼不使用segues?您可以嘗試從表視圖單元向同一個表視圖控制器啓動一個segue,而不是手動實例化。對於參數傳遞,如果需要,可以使用'prepareForSegueWithIdentifier:'回調函數。 – Lvsti

+0

@Lvsti - 很好的時機,您的評論就像我發佈我的答案一樣! – jrturton

+0

@jrturton哈哈true :) – Lvsti

回答

2
MyTableViewController *childView = [[MyTableViewController alloc] init]; 

此行創建視圖控制器的新實例,而不參考故事板。因此,它不會連接任何你的網點 - 表格視圖可能是好的,因爲它是默認創建和連接的,但其他任何東西都不會連接。

您可以通過在viewDidLoad中記錄您的圖像視圖插座來確認此事 - 它將爲零。

你應該從表中的行拖動SEGUE到同一個視圖控制器的視圖控制器對象創建一個遞歸棧:

enter image description here

由於Lvsti在評論中指出的那樣,你可以通過任何參數prepareForSegue:sender: