0

我有一個帶有幾個筆尖的TabBar應用程序,大多數都帶有導航欄。它工作得很好,除了tabBar「更多」部分內的「視圖」之外。TabBar應用程序,moreNavigationBar和帶導航條的筆桿

正如預期的那樣,它會將NavBar返回到「更多」列表,以及我放入筆尖的NavBar。

我試圖刪除從moreNavigationBar視圖控制器,並把從我的筆尖的導航欄上的控制器,但我得到的和額外的觀點從什麼地方:

- (void)viewDidLoad {  
    TestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    UITabBarController *ctrl = appDelegate.rootController; 

    UINavigationController *navCtrl = ctrl.moreNavigationController; 

    [navCtrl popToRootViewControllerAnimated: NO]; 
    [navCtrl pushViewController: navController.topViewController animated: YES]; 
    navController = navCtrl; 
[super viewDidLoad]; 
} 

我的AppDelegate:

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
UITabBarController *rootController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *rootController; 

MainWindow nib是一個基於Window的項目的TabBarController,鏈接到我的應用程序委託中的rootController。

其他筆尖有一個視圖+ navigationController,我有一個UITableViewController子類作爲我的根視圖控制器。

如果我能得到這個工作,它不會解決我的問題,因爲我想讓用戶把它放在tabBar的任何地方,所以,我必須知道是否有一個導航條。所以,我的問題是,你如何知道是否有一個導航條(在這種情況下,如果顯示tabBar的導航條),如果是這樣,我如何讓我的導航控制器「成爲」tabBar的導航控制器?

或者,如果您有關於如何解決這個問題的另一種思路,我還可以理解的:)

回答

1

從蘋果的建議是,你必須使用TabBar控制器包含導航控制器,而不是其他方式周圍。我有一個設置更多或更少的這樣的,我有更多標籤保持導航控制器,基本上是這樣的:

 
@interface SomethingNavViewController : UIViewController { 
    UIView* aview; 
    UINavigationController *navigationController; 
} 
@property (nonatomic, retain) IBOutlet UIView *aview; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

@end 

在NIB,我在較面板的視圖具有單獨的導航控制器,我沒有用導航控制器視圖替換標籤欄項目的視圖,我剛剛添加了導航控制器到視圖。

我在執行文件,我有:關於這個

 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self view] addSubview:[navigationController view]]; 
    SomeOtherController *aController = [[[SomeOtherController alloc ] initWithNibName:@"SomeOtherController" bundle:nil ] autorelease]; 
    aController.title = @"Artwalks"; 
     // lots of application logic here. 
    [self.navigationController pushViewController:aController animated:YES]; 
    [self.navigationController setDelegate:self]; 
} 

一個關鍵的事情是,我已經實現了navigationController的委託方法,這是非常方便的,當你只是插入導航控制器。我發現我沒有做到這一點的時候,我的觀點沒有得到viewDidAppear的消息,所以我實現了協議,並將此方法:

 
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) { 
     [viewController viewDidAppear:animated]; 
    } 
} 

和解決各種我揮之不去的問題。

無論如何,我希望這個答案給你你需要的細節。如果沒有,請提供有關您的問題的更多詳情。我不太確定什麼,但我從某處遇到了額外的視圖,但這聽起來像我在找到此解決方案之前遇到的情況。

+0

謝謝。你的答案實際上讓我多了一點點,但是,當我試圖實施它時,我沒有得到預期的結果。當我在「更多」項/部分中時,仍然會看到兩個導航條。 我不知道如果我需要有一個「SomethingNavViewController」的筆尖,但我嘗試了兩種方式(有和沒有筆尖)。用一個筆尖,我創建一個基於View XIB的,然後拖動一個navigationController並將SomethingNavViewController的出口連接到它。不知何故,這似乎是錯的。 您可以創建一個示例項目並將其託管在某處,以便我可以看一看嗎?謝謝。 – 2010-02-03 03:13:41

+0

我已經讀過你的答案了,我發現了比我錯過了NIB部分。 「將Nav控制器添加到視圖中」是什麼意思?我有一個直接在MainWindow.xib中創建的TabBarController,但我沒有看到放置NavController的位置。我不能看到更多的面板,因爲IB直接顯示所有項目,並且只有在模擬器中運行時才放置「更多」按鈕。 – 2010-02-03 03:56:15

+0

對不起,我的意思是每當我說上面的NIB時XIB。舊習慣。 如果你可以發佈一個示例應用程序,我會檢查出來。我懷疑從這個評論,我不完全理解你的問題。 – corprew 2010-02-03 19:37:18