2011-09-20 53 views
1

當我在第三個視圖中觸摸取消按鈕時,我想直接返回到第一個視圖。我怎樣才能做到這一點?如何直接從第三個視圖返回到第一個視圖?

這是代碼。

// this part is in the first view. 
SecondController *aSecondController = [[SecondController alloc] init]; 
UINavigationController *aNaviController = [[UINavigationController alloc] initWithRootViewController:aSecondController]; 
self.naviController = aNaviController; 
[aNaviController release]; 
[aSecondController release]; 
[self.view addSubview:naviController.view]; 

// this part is in the second view. 
ThirdController *thirdController = [[ThirdController alloc] initWithStyle:UITableViewStyleGrouped];    
[self.navigationController pushViewController:thirdView]; 
[thirdView release]; 

// this part is in the third view. 
- (void)cancel { 
    [self.navigationController popViewControllerAnimated:NO]; // this only goes to the second view. 
} 

popToViewController,popToRootViewController也只能轉到第二個視圖。

+0

對不起,我最初沒有注意到有什麼不同。我給你的問題加了一票。 – zaph

回答

0

在您的應用程序委託中設置導航控制器。使第一個視圖控制器成爲導航控制器的根控制器,而不是讓第一個視圖控制器擁有導航控制器。然後您可以使用-popToRootViewController:animated:作爲其他答案建議。

+0

我不知道該怎麼做。請給我看代碼示例。 – user698200

+0

您清楚知道如何設置導航控制器;你已經在做。將該代碼移動到應用程序委託中的某個位置,例如'-applicationDidFinishLaunchingWithOptions:'。擺脫你的第一個視圖控制器中的'naviController'屬性。不要爲導航控制器的根指定第二個視圖控制器,請指定第一個視圖控制器。這哪一部分讓你感到困惑? – Caleb

2

您可以使用popToRootViewController:animated:方法,如果您的根視圖控制器是您所追求的。您還可以使用popToViewController:animated:指定您想要在導航堆棧頂部結束的控制器。

+0

它是否轉到第一個視圖?爲什麼導航欄仍然存在? – user698200

1

使用UINavigationControllers-popToRootViewControllerAnimated:

- (void)cancel { 
    [self.navigationController popToRootViewControllerAnimated:NO]; 
} 

如果你想彈出你可以使用popToViewController:animated:和使用viewControllers屬性的正確索引處獲取視圖控制器特定視圖控制器。

+0

它會轉到第一個視圖嗎?爲什麼導航欄仍然存在? – user698200

+1

因爲它轉到視圖控制器中的第一個視圖,並且你是雙重發帖..不這樣做。看看'setNavigationBarHidden:'方法。 – Joe

相關問題