[英]Best way to switch View Controller in iOS
我的項目中有2個視圖控制器。 Inside View Controller1我想通過按下按鈕切換到View Controller 2。 目前我這樣做
- (IBAction)startController2:(id)sender {
viewController1 vc2 = [[viewController2 alloc] init];
self.view = vc2.view;
}
這似乎工作正常,但按鈕按下和第二個視圖控制器之間出現了很大的延遲(4秒)。 如果我直接從AppDelegate調用viewController2加載更快的東西。 我在這做錯了什么。 任何幫助是極大的贊賞。
需要考慮的幾件事情。
你絕對不是故意做self.view = vc2.view
。 您只需將一個視圖控制器負責另一個視圖控制器的視圖。 你可能想說的是[self.view addSubview:vc2.view]
。 僅這一點可能會解決您的問題, 但 ......
實際上不要使用該解決方案。 雖然它幾乎直接來自一些流行的iPhone編程書中的樣本,但這是一個壞主意。 閱讀“濫用UIViewControllers”以了解原因。
這一切都在“從其他視圖控制器呈現視圖控制器”一章中。
它將歸結為:
一個UINavigationController,(看到優秀的蘋果直營店他們在這里 ),然后你只需[navigationController pushViewController:vc2]
正如andoabhay建議的那樣 ,一個“手動管理”的模態視圖控制器堆棧
正如傑森所說 ,明確地將VC作為另一個孩子的孩子
您應該考慮使用UINavigationController
來切換視圖控制器。 如果你的構建目標是iOS 5.0+,你也可以使用新的控制器容器概念: [mainViewController addChildViewController:childViewController]
。
使用presentModalViewController
如下
[self presentModalViewController:vc2 animated:YES completion:^(void){}];
並在viewController1
使用
[self dismissModalViewControllerAnimated:YES completion:^(void){}];
你想在哪里回到以前的控制器。
[aController presentViewController:bController animated:NO completion:nil];
[bController presentViewController:cController animated:NO completion:nil];
當你想要解雇cController時,你可以這樣做
[aController dismissViewControllerAnimated:NO completion:nil];
這是流程圖。
aController → bController → cController
↑___________________________↓
您應該使用UINavigationController來切換視圖控制器。
您在View1上並在按鈕單擊方法上添加以下代碼。
View2 *View2Controller = [[View2 alloc] initWithNibName:@"View2" bundle:nil]; [self.navigationController pushViewController:view2Controller animated:YES];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.