2009-10-23 67 views
6

我有一個涉及UINavigationController的問題。如何重置UINavigationController?

我有一個應用程序有三個視圖控制器,我使用導航控制器的推送和彈出功能進行切換。

問題是這樣的: 我站在第三視圖控制器和進行調用以
[self.navigationController popToRootViewControllerAnimated:YES];
這使我到第一個視圖控制器(這正是我想要的),但是當我然後嘗試導航到第二個視圖控制器時,出於某種原因,我在第三個視圖控制器中結束。

有沒有什麼辦法可以重置導航控制器,或者我這樣做的方式不對嗎?

下面是我使用壓入和彈出導航控制器的代碼:

當用戶決定啓動相機下面的代碼是所謂的根視圖控制器。

if(self.cameraViewController == nil) 
{ 
     CollageCameraViewController *camView = [[CollageCameraViewController alloc] init];//WithNibName:nil bundle:[NSBundle mainBundle]]; 
     self.cameraViewController = camView; 
     [camView release]; 

} 
[self.navigationController pushViewController:self.cameraViewController animated:NO]; 

下面的代碼是從CollageCameraViewController(二)呼籲用戶已經採取了他的照片後:

if(self.renderView == nil) 
{ 
    CollageRenderViewController *renderViewController = [[CollageRenderViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]]; 
    self.renderView = renderViewController; 
    [renderViewController release]; 
} 
[self.navigationController pushViewController:self.renderView animated:YES]; 

下面的代碼是從CollageRenderViewController當用戶決定回去叫到主要(根)視圖:

[self.navigationController popToRootViewControllerAnimated:YES]; 

現在,如果我嘗試再次推送CollageCameraViewController,我最終將在CollageRenderViewController中完成,爲什麼?

乾杯, 安德烈亞斯

+0

發佈您的一些代碼,以便我們可以看到您如何推送/彈出視圖控制器以及您究竟在推送和彈出什麼內容。 – Jasarien 2009-10-23 12:37:51

回答

2

一旦你彈出到根視圖控制器,它是「復位」。導航控制器的下一個動作應該是推動(或重新推送)相應的視圖控制器。你不應該試圖通過堆棧「導航」。

更新:

我創建了一個基於導航的iPhone項目,以測試你的代碼和它的作品。我的三個視圖中的每一個都有一個按鈕,它在點擊時向其控制器發送IBAction消息。

這裏是我的代碼:

RootViewController.h:

@class SecondViewController; 

@interface RootViewController : UIViewController { 
    SecondViewController *secondViewController; 
} 

@property (nonatomic, retain) SecondViewController *secondViewController; 

- (IBAction)pushSecondVC; 

@end 

RootViewController.m:

#import "RootViewController.h" 
#import "SecondViewController.h" 

@implementation RootViewController 

@synthesize secondViewController; 

- (IBAction)pushSecondVC { 
    if(self.secondViewController == nil) 
    { 
     SecondViewController *secondVC = [[SecondViewController alloc] init]; 
     self.secondViewController = secondVC; 
     [secondVC release]; 
    } 
    [self.navigationController pushViewController:self.secondViewController animated:NO]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"Root View"; 
} 

SecondViewController。H:

#import <UIKit/UIKit.h> 

@class ThirdViewController; 

@interface SecondViewController : UIViewController { 
    ThirdViewController *thirdViewController; 
} 

@property (nonatomic, retain) ThirdViewController *thirdViewController; 

- (IBAction)pushThirdVC; 

@end 

SecondViewController.m:

#import "SecondViewController.h" 
#import "ThirdViewController.h" 

@implementation SecondViewController 

@synthesize thirdViewController; 

- (IBAction)pushThirdVC { 
    if(self.thirdViewController == nil) 
    { 
     ThirdViewController *thirdVC = [[ThirdViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]]; 
     self.thirdViewController = thirdVC; 
     [thirdVC release]; 
    } 
    [self.navigationController pushViewController:self.thirdViewController animated:YES]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"2nd View"; 
} 

ThirdViewController.h:

#import <UIKit/UIKit.h> 

@interface ThirdViewController : UIViewController { 
} 

- (IBAction)popToRoot; 

@end 

ThirdViewController.m:

#import "ThirdViewController.h" 

@implementation ThirdViewController 

- (IBAction)popToRoot { 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"3rd View"; 
} 
+0

如何重新推送視圖控制器?我已經添加了處理上述推送和彈出的代碼,您有什麼建議嗎? – drisse 2009-10-26 07:05:49

+0

「重新推送」是什麼意思?你知道了嗎? – gerry3 2009-12-19 19:50:02

5

在我移動到真正的主屏幕之前,我的堆棧中有幾個VC作爲設置屏幕。

我雷到了這樣的工作:

HomeViewController *hvc = [[HomeViewController alloc] init]; 
[self.navigationController pushViewController:hvc animated:YES]; 
self.navigationController.viewControllers = [[NSArray alloc] initWithObjects:hvc, nil]; 

我推HomeViewController於是重寫棧只有主屏幕。

相關問題