我正在使用monotouch開發ios應用程序。假設我有3個屏幕:s1,s2和s3。用戶可以像這樣打開它們:s1 - > s2 - > s3。沒有ios上的屏幕的歷史
我想如果用戶打開s2,它可以通過導航後退按鈕回到s1屏幕,但是如果通過在導航欄中按回按鈕進入s3屏幕,則應用程序回到s1 no s2。
在iOS中可能嗎?在android上,如果你使用NoHistory
屬性你可以實現這個功能,那麼ios中是否還有任何等價物?
我正在使用monotouch開發ios應用程序。假設我有3個屏幕:s1,s2和s3。用戶可以像這樣打開它們:s1 - > s2 - > s3。沒有ios上的屏幕的歷史
我想如果用戶打開s2,它可以通過導航後退按鈕回到s1屏幕,但是如果通過在導航欄中按回按鈕進入s3屏幕,則應用程序回到s1 no s2。
在iOS中可能嗎?在android上,如果你使用NoHistory
屬性你可以實現這個功能,那麼ios中是否還有任何等價物?
您可以手動編輯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
。
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];