2009-06-25 35 views
0

我有按鈕在我的導航欄並在其enabled性能取決於應用程序狀態的容器視圖的工具欄子視圖。目前按鈕設置在viewWillAppear,所以如果我離開視圖然後返回,則會發生正確的事情。我認爲[containerView setNeedsDisplay]會做的伎倆,但沒有。如何更新視圖與UIButtons

(I具有在容器中認爲可以強制當textView.text改變爲更新UITextViews,但應用程序邏輯是這樣的,這是很難明確地更新所有的正確按鈕的作爲狀態變化。)

+0

您是否嘗試過在viewDidLoad中設置按鈕和viewWillDisappear刪除? – prakash 2009-06-25 19:49:40

+0

問題是我想在視圖仍然可見時更改按鈕的狀態(即狀態由容器中的其他子視圖更改) - 如何強制視圖重新加載,以使viewDidLoad或viewWillAppear被調用,或者是否有另一種方法可以做到這一點嗎? – iPhoneDollaraire 2009-06-26 02:24:12

回答

0


您可以更改代碼中任何位置的navigationBar和工具欄按鈕的狀態。對於視圖的初始設置,在viewWillDisappear和viewWillAppear中放置一些代碼是很有用的,就像你所做的那樣。

例如,如果您希望在向textField中添加文本時將編輯器中的導航欄上的按鈕從「取消」更改爲「輸入」,則只需初始化一個新的UIBarButtonItem並將其粘貼到舊的是。你在你的viewWillAppear中添加了「取消」按鈕,這樣的...

- (void)viewWillAppear:(BOOL)animated { 
self.navigationItem.rightBarButtonItem = 
[[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelAction)] autorelease]; 
} 

然後在你的代碼的其他地方,你可以簡單地通過在完全相同的方式一個新的覆蓋該導航項目。然而,你顯然想要給它一個不同的標題(在這裏是我的例子中的「Enter」),也許是一個不同的動作。


在工具欄上的條款,UINavigationControllers都能應付自如的變化。這是因爲每個UINavigationController + UIViewController組合都帶有一個內置的工具欄,只是它們不會顯示它,除非您特別要求。 這樣做的最好方法是設置UIViewController的工具欄項目,然後讓navigationController根據需要顯示/隱藏工具欄。

因此,例如,說我在UIViewController中的初始化方法進行三次的UIBarButtonItem實例......那麼我需要做的就是把它們粘在數組和項目的數組分配到工具欄,例如

[self setToolbarItems:[NSArray arrayWithObjects:button1, button2, button3, nil] animated:NO]; 

然後在viewWillAppear中(或viewDidAppear)方法,我可以使用navigationController顯示工具欄:

[self.navigationController setToolbarHidden:NO animated:YES]; 

記得剛做相反當視圖將消失(即在同一通話但是使用setToolbarHidden:YES)。 在你的UIViewController的代碼的任何一點,你可以使用與你在初始化過程中一樣的方法來改變按鈕,即[self setToolbarItems:.....]。