2013-07-16 111 views
0

我一直在Xcode中設置一個類似於iOS郵件應用程序的UI,但第二個popover視圖控制器不會一直播放。我試圖導航欄的「交易」標題設置爲帳戶的名稱,但它反而會設置爲DetailViewController標題:如何設置NavigationItem/NavigationBar的標題

之前,我選擇一個帳戶:http://i.stack.imgur.com/zo75V.png

我後選擇「新帳戶」:http://i.stack.imgur.com/8DPBB.png

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Account *account = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
    self.transactionViewController.navigationItem.title = account.name; 
} 

我用上面的代碼來設置標題,但標題設置了錯誤的viewController ... 此相同的代碼不會產生任何結果都適用於iPhone版。

編輯: 我其實本指南中發現這個問題的答案:Passing Data between View Controllers

的關鍵是使用-prepareForSegue:sender:方法來得到正確的viewController,並設置其標題。這也允許您將任何數據從一個ViewController傳遞到另一個ViewController,只要您使用Segue在它們之間切換,我現在使用它來設置交易帳戶並獲取帳戶名稱以設置爲seque.destinationViewController.navigationItem.title屬性

謝謝每個人都需要您的幫助

+0

你想設置標題'Transaction'到DetailViewController? – soryngod

+0

不,我想設置的帳戶名稱匹配我的TransactionViewController標題和DetailViewController應保持不變 –

+0

在這種情況下,標題是「新帳戶」 –

回答

2

每個視圖控制器都有一個navigationItem屬性,每個導航項都有一個title屬性。要設置視圖控制器的導航欄中顯示的標題,您可以簡單地設置視圖控制器的navigationItem.title,就像你在做什麼一樣。

我用上面的代碼來設置標題,但標題設置了錯誤的viewController

這聽起來像你正確設置標題,但也許是設置錯誤的標題視圖控制器。它看起來像 您在問題中提到的方法是在「主」視圖控制器中,即屏幕左側的那個,並且它的transactionViewController屬性指向「詳細信息」視圖控制器。從你的評論中,我認爲你要在「主」一側創建一個新的視圖控制器並將其推到導航堆棧上,並且它是那個你想要標題爲「新帳戶」的視圖控制器(或者是任何帳戶的名稱被選中)。如果這一切都正確,那麼您應該在代碼中查找創建新控制器的位置,並將navigationItem.title設置爲適當的字符串。

一個重要的問題是:什麼對象試圖設置新的視圖控制器的標題?在你上面的代碼中,你正試圖從父控制器中完成它。由於您使用的是故事板,而且新的視圖控制器是由segue創建的,因此您無法通過...didSelectRowAtIndexPath...方法輕鬆訪問新的視圖控制器。如果您想繼續在父級中設置標題,則可以實施-prepareForSegue:sender:以設置標題。另一方面,任何視圖控制器都應該或多或少地負責它的表現方式,所以你可能會考慮讓子視圖控制器設置自己的標題,而不是讓父級控制器執行它。父級可能已經使用-prepareForSegue:sender:在子視圖控制器中設置帳戶。也許孩子有一個account屬性,父母呼叫設置此信息?您可以實現該屬性的setter來設置視圖控制器的標題:

- (void)setAccount:(Account*)account 
{ 
    if (account != _account) { 
     _account = account; 
     self.navigationItem.title = account.name; 
    } 
} 
+0

的'transactionViewController'是我的主人視圖控制器的特性和類型是'TransactionViewController *的'。 如何確保我擁有正確的視圖控制器? –

+0

您所描述的一切都是正確的,只是我使用故事板並使用表單元格中的segues來推送新的視圖控制器。這是否有很大的不同?我在界面生成器中設置了標題,但我想在運行時動態更改它。 –

+0

@NicolaLucasBuescher好吧,我已經更新了有關如何將故事板做一些這方面的更多信息問題的答案。 – Caleb

2

它是self.navigationItem.title = account.name;。如果我看得很清楚,桌子就在MasterViewController之內,並且主人有一個作爲根的導航控制器。

+0

這並不恰克細節,但它仍然沒有將「交易」到「新帳戶」 –

+0

是否後退按鈕將標題更改爲新帳戶? – soryngod

+0

是的,但帳戶標題也更改爲「新帳戶」。 –