簡體   English   中英

在iOS中切換View Controller的最佳方法

[英]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加載更快的東西。 我在這做錯了什么。 任何幫助是極大的贊賞。

需要考慮的幾件事情。

第1部分:“我在這里做錯了什么”?

  1. 你絕對不是故意做self.view = vc2.view 您只需將一個視圖控制器負責另一個視圖控制器的視圖。 你可能想說的是[self.view addSubview:vc2.view] 僅這一點可能會解決您的問題, ......

  2. 實際上不要使用該解決方案。 雖然它幾乎直接來自一些流行的iPhone編程書中的樣本,但這是一個壞主意。 閱讀“濫用UIViewControllers”以了解原因。

第2部分:你應該做什么

這一切都在“從其他視圖控制器呈現視圖控制器”一章中。

它將歸結為:

  • 一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM