這是一個非常偷偷摸摸的方法,我編碼在本週末用於我的應用程序。把這段代碼放到活動視圖控制器(即表格視圖)中,該控制器想要用右向左轉換僞「推」新的視圖控制器。準備新的ViewController然後調用它。 與標準從左到右過渡略有不同的是,標題欄不生成動畫,它在之後交換。 您「借用」了新的視圖控制器,並使其成爲活動視圖控制器的孩子足夠長的時間來完成動畫,然後將它們放回原樣。 Apple對UINavigationController規則非常具體,實際上對訂單的任何更改或推送和彈出邏輯都會引發異常,所以有相當數量的試驗和錯誤。
-(void) showVC:(UIViewController *) nextVC rightToLeft:(BOOL) rightToLeft {
[self addChildViewController:neighbor];
CGRect offscreenFrame = self.view.frame;
if(rightToLeft) {
offscreenFrame.origin.x = offscreenFrame.size.width * -1.0;
} else if(direction == MyClimbDirectionRight) {
offscreenFrame.origin.x = offscreenFrame.size.width;
}
[[neighbor view] setFrame:offscreenFrame];
[self.view addSubview:[neighbor view]];
[neighbor didMoveToParentViewController:self];
[UIView animateWithDuration:0.5 animations:^{
[[neighbor view] setFrame:self.view.frame];
} completion:^(BOOL finished){
[neighbor willMoveToParentViewController:nil];
[neighbor.view removeFromSuperview];
[neighbor removeFromParentViewController];
[[self navigationController] pushViewController:neighbor animated:NO];
NSMutableArray *newStack = [[[self navigationController] viewControllers] mutableCopy];
[newStack removeObjectAtIndex:1]; //self, just below top
[[self navigationController] setViewControllers:newStack];
}];
}
謝謝,雖然它不完全是最優雅的解決方案(我希望蘋果只會在他們的用戶界面上支持雙向)。您的解決方案的確爲那些希望替換標準UINavigtionController的人節省了時間。 我最終做的是繼承UINavigtionController並重寫push和pop方法,使用不帶動畫的另一個「假」控制器並用動畫彈出它(導致反向推動畫)的技巧,我還在左邊使用了自定義NavigationItems,右側複製後退按鈕。 – Barak