2015-05-28 90 views
0

我想做一個非常基本的設置應用程序,其中用戶在UIViewController上設置5個選項,然後根據選定的選項執行功能。其中3個選項位於包含UITableView的容器中。當選擇來自表格視圖的單元時,將顯示具有該單元的選項的新視圖控制器(即,用戶從表格中選擇「金屬」,然後從新的詳細視圖控制器中選擇「鋼材」)。當選擇一個值時,UIViewContoller /父視圖使​​用展開順序顯示,「金屬」行的詳細文本應在容器表中顯示「鋼」從父視圖控制器設置容器中的tableViewCell

單元格選擇segue適當地工作,NSLog顯示選擇的選項被正確存儲。問題是,我無法弄清楚如何將詳細文本標籤設置爲新設置的變量。我需要什麼代碼來設置UIViewController容器表上的詳細文本標籤?

有一點額外的信息:我的unwind segue回去兩個視圖控制器。如果我放鬆到容器內的表格,那麼segue在選擇行時不起作用。

下面是從設置的選擇(視圖控制器,顯示從我的例子「鋼」)

//Sets selected metal on row selection 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender: (UITableViewCell *)sender { 
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:selectedIndexPath]; 
self.selectedMetal = cell.textlabel.text; 
NSLog (@"%@", self.selectedMetal); 
} 

這是我的展開賽格瑞的代碼,並執行一次被選擇的細節行prepareForSegue代碼:

-(IBAction) unwindToParentView:(UIStoryBoardSegue *)segue{ 
MetalTableViewController *child = (MetalTableViewController *) segue.sourceViewController; 
//Trying to reference the container table here 
OptionTableViewController *optionTable = [[OptionTableViewController alloc] initWithNibName:@"OptionTableViewController bundle:nil]; 
//Have a table view cell in the .h set as an IBOutlet that I'm trying to set here 
optionTable.cell1.detailTextLabel.text = child.selectedMetal; 

更新

這個問題肯定有事情做與我創建OptionTableViewController的新實例。我可以在其viewDidLoad方法中爲我的容器表視圖控制器手動設置detailTextLabel的值,但是當我嘗試NSLog的optionTable.detailTextLabel.text值時,它會返回一個(null)值,這意味着我有一些無用的東西在我放鬆塊或我沒有正確傳遞selectedMetal變量。

+0

你爲什麼要使用detailTextLabel兩次? optionTable.cell1.detailTextLabel.detailTextLabel.text = child.selectedMetal; –

+0

錯字。我會編輯它。謝謝 – Joey

+0

你不是'引用'容器的表視圖,'OptionTableViewController * optionTable = [[OptionTableViewController alloc] initWithNibName:@「OptionTableViewController bundle:nil];',你正在創建一個新的實例。 – rdelmar

回答

0

爲了解決這個問題,我稍微改變了我的初始設計,並將所有選項都放在了表格視圖控制器中。現在我的segues能夠正常工作,並且我在控制器之間傳遞數據時沒有任何問題。如果任何人都可以針對原始問題提出解決方案(將數據從父視圖傳遞到嵌入的容器視圖),那麼我會很樂意嘗試,如果它有效,請提供答案。

相關問題