2014-05-10 70 views
0

我正在構建一個iPad應用程序,我將使用容器視圖。UILabel在子容器視圖不更新

我使用故事板,所以我加了2 UIViewControllers和1 UITableViewController

在一個UIViewController我添加了2個容器視圖,並通過嵌入segue將每個視圖連接到UITableViewController和其他UIViewController

兩個容器視圖在應用程序啓動時都可見。

我填充tableview與數組,我試圖通過一個字符串到另一個UIViewController通過didselectrowatindexpath

我可以看到字符串通過nslogging傳遞給viewcontroller,但視圖控制器中的標籤不會更改。

這裏是在tableviewcontroller的didSelectRowAtIndexPath方法:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    DetailVC *detailVC = [[DetailVC alloc] init]; 
    NSString *urlString = [siteAddresses objectAtIndex:indexPath.row]; 
    detailVC.webAddress = urlString; 

    [detailVC viewWillAppear:YES]; 
} 

這裏是recieving視圖控制器的M檔:

@synthesize webAddress, webview, webURL; 

-(void)viewWillAppear:(BOOL)animated 
{ 

    self.webAddress = webAddress; 
    webURL.text = webAddress; 
    NSLog(@"%@",webAddress); 
    NSLog(@"%@", webURL.text); 
    [super viewWillAppear:animated]; 
} 

所有網點和連接都正確,但仍標籤文本不會改變。

我使用storyboard通過嵌入segues將容器視圖連接到控制器。

任何幫助,高度讚賞。

+0

我想你實際上並沒有更新標籤。爲什麼會發生這種情況有很多種不同的可能性,但最明顯的是'webURL'是一個空指針。 –

+0

您似乎在'didSelect ...上分配了一個新的控制器...'而不是在childController上設置屬性(你可以通過你父級的'childViewControllers'屬性獲得對嵌入式控制器的引用)。 – Alladinian

回答

1

您正在使用alloc init創建新的詳細視圖。相反,您應該引用現有的詳細信息視圖,例如通過parentViewController

+0

如何通過parentViewController引用詳細視圖? – kupilot

+0

爲您的容器控制器提供一個包含詳細視圖控制器的@屬性。然後使用'self.parentViewController.detailViewController'。 – Mundi

1

正如其他海報指出的,你正在didSelectRowAtIndexPath中創建視圖控制器的新實例,這是錯誤的。

你想要做的是寫你的prepareForSegue,這樣它會檢查每個嵌入賽格瑞的SEGUE標識,並保存一個指向每個視圖子視圖控制器,你將需要稍後查閱:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString: @"detailVC"] 
    self.detailVC = segue.destinationViewController; 
    else if ([segue.identifier isEqualToString: @"childVC2"] 
    self.childVC2 = segue.destinationViewController; 
    else if ([segue.identifier isEqualToString: @"childTableVC"] 
    self.childTableVC = segue.destinationViewController; 
} 

(很明顯,你需要設置你的故事板與您塞格斯有意義的標識符,並更改上面的代碼相匹配。)

然後你didSelectRowAtIndexPath方法方法可能是這樣的:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.detailVC updateWebAddressWithString: urlString]; 
} 

請注意,您不應該直接調用VC的viewWillAppear:動畫方法。

而是編寫一個方法updateWebAddressWithString,它接受一個新的url字符串,將它傳遞給web視圖,然後觸發更新。

+0

表視圖控制器實際上是一個子視圖控制器,而詳細視圖控制器也是一個子視圖控制器,因此在didselectrowatindexpath中添加[self.detailVC ...]將不起作用?如何從tableviewcontroller訪問詳細的子視圖控制器?謝謝 – kupilot