2013-08-04 38 views
2

我正在使用monotouch開發ios應用程序。假設我有3個屏幕:s1,s2和s3。用戶可以像這樣打開它們:s1 - > s2 - > s3。沒有ios上的屏幕的歷史

我想如果用戶打開s2,它可以通過導航後退按鈕回到s1屏幕,但是如果通過在導航欄中按回按鈕進入s3屏幕,則應用程序回到s1 no s2。

在iOS中可能嗎?在android上,如果你使用NoHistory屬性你可以實現這個功能,那麼ios中是否還有任何等價物?

回答

3

您可以手動編輯navigationController中的視圖控制器以刪除s2。

您可以使用self.navigationController.viewControllers來獲取當前堆棧,並使用[self.navigationController setViewControllers:animated:]來設置堆棧。

在你的情況,你可能想要做的:

NSMutableArray *views = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
[views removeObjectAtIndex:1]; 
[self.navigationController setViewControllers:views animated:NO]; 

如果你把這個在你的S3的viewController,它將得到viewControllers在棧上,(在索引1對象)刪除第二個,並將它們設置爲新堆棧。動畫:沒有隻是使它沒有動畫即刻它。

要知道,你可能想改變這行代碼,這樣,如果你有機會不被S2之前到S3,它不會彈出S3。此外,如果s2和根目錄之間存在另一個視圖,則您要刪除的視圖可能不是objectAtIndex:1

0

U可以試試這個

在後退按鈕按下:

for (UIViewController * viewController in self.navigationController.viewControllers) 
{ 
    if ([viewController isKindOfClass: NSClassFromString(@"<ClassName for S3>")]) 
    { 
     [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: 0] animated: NO]; 
      break; 
    } 
} 

或u還可以使用

[self.navigationController popToRootViewControllerAnimated: NO];