2011-02-26 57 views
0

我使用導航欄和表格在IB中創建了一個視圖。在導航欄上放兩個按鈕,取消並完成。我用這個觀點就像一個模式的看法有:訪問模態視圖的導航欄按鈕的正確方法是什麼?

[self presentModalViewController:controller animated:YES]; 

我的問題是,當我使用:

[self.navigationItem.rightBarButtonItem setEnabled:YES]; 

,使右側的按鈕。它不起作用。

我有設置委託嗎?我必須做什麼代碼段落?如果我爲右按鈕創建一個IBOutlet,並使用[doneButton setEnabled:YES],它會起作用,但我認爲這不是正確的方法。

回答

0

代表與您的問題無關。

您可能確實已將導航欄直接放入您的視圖中。因此像self.navigationItem這樣的東西不起作用。你有兩種選擇...

將你的按鈕連接到你的代碼插座並直接訪問它們。

或者從您的視圖中刪除的導航欄,以這種方式提出您的視圖控制器...

MyViewController *vc = [[MyViewController alloc] initWith...]; 
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:vc]; 
[vc release]; 
[self presentModalViewController:navCon animated:YES]; 
[navCon release]; 

...現在你可以通過navigationItem訪問左/右按鈕。

+0

什麼是兩者之間的「更好」的解決方案?我將navbar直接放入視圖中,並將按鈕連接到一個插座,並且我知道這是否是一種不好的代碼編寫方式。 – Sefran2 2011-02-26 11:22:59

+0

這取決於。一切都是可能的,都是關於你的感受。沒有一條正確的道路。如果您只有一個視圖控制器,請按照您的方式進行。如果你有更多的視圖控制器,更復雜的層次等,最好使用navigationItem。它更乾淨,可擴展,可重用,... – robertvojta 2011-02-26 12:22:40

2

爲了在界面構建器中的模態視圖控制器上放置一個導航欄(並設置調用詳細視圖控制器中的動作的欄按鈕項),您需要經過一個間接級別(導航欄將會在一個的.xib,你的詳細視圖的細節將在一個不同的XIB):

  • 創建包含導航控制器對象XIB文件,並設置其根視圖控制器是您的詳細視圖控制器您希望通過導航欄進行模態顯示。

  • 將條形按鈕項添加到詳細控制器的導航欄並將它們連接到詳細視圖控制器對象中的IBActions。

  • 您的詳細視圖控制器將需要在一個單獨的.xib文件

  • 創建只存在持有導航控制器IBOutlet中,並將其設置爲是文件的所有者對象,「加載器」對象廈門國際銀行是:

@interface Loader : NSObject 
@property (nonatomic, retain) IBOutlet UINavigationController *navVC; 
@end 

@implementation Loader 
@synthesize navVC; 
- (void) dealloc 
{ 
    [navVC release]; 
    [super dealloc]; 
} 
@end 

包含導航控制器看起來像這樣你XIB文件:

enter image description here

確保導航控制器對象conntected了「裝載機」對象的navVC出口,並確保欄按鈕項目連接到您的詳細視圖控制器的期望IBActions。

然後你目前使用此代碼這件事:

Loader *loader = [[[Loader alloc] init] autorelease]; 
[[NSBundle mainBundle] loadNibNamed:@"ModalVC" owner:loader options:nil]; 
[self presentModalViewController:loader.navVC animated:YES];