我正在对需要初始化过程的视图控制器执行segue。目前,初始化发生在目标视图控制器的ViewDidLoad中。然而,初始化是相当冗长的,我想在它发生时显示一个微调器。
如果我在ViewDidLoad中创建UIActivityIndicatorView并在另一个线程上运行初始化,当然ViewDidLoad退出并且其余的加载过程发生 - 特别是应该调用Autorotate,并且这包含假定已经发生初始化过程的代码。 (即使它没有,我也不希望在初始化之前显示目标视图。)
答案似乎是在调用segue之前初始化目标视图控制器。但是我不能在调用视图控制器中的prepareForSegue中执行此操作,原因相同 - 它退出并在初始化发生之前调用segue。
所以我似乎需要实例化目标控制器,初始化它然后以初始化的控制器作为目标执行segue。我的问题是我不知道该怎么做。我遇到的唯一可能的方法是继承UIStoryboardSegue并将初始化放在init的子类中。然后我假设我打电话
UIStoryboardSegue * segue = [[SubclassedSegue alloc]initWithIdentifier:@"??what should this be??" source:self destination:targetViewContoller];
[segue perform]; // which just calls [super perform];
来自源视图控制器的。它是否正确?任何人都可以告诉我一些使用这个过程的示例代码 - 或者最好是一个我没想过的简单方法吗?我不禁想到必须有一种更简单的方式来展示一个微调器。
感谢您的帮助。
答案 0 :(得分:3)
仅当您需要在segue期间显示自定义动画/过渡时,才应将Segues子类化。
在通常情况下,您可能希望这样做:
__ block Destination *destinationVC = [self.storyboard instantiateViewControllerWithIdentifier:@"destination "];
//START BUSY CURSOR HERE
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// init whatever you want for destinationVC HERE.
dispatch_async(dispatch_get_main_queue(),
^{
//STOP BUSY CURSOR
//PERFORM UI UPDATE HERE
[self presentViewController:destinationVC animated:YES completion:nil];
});
答案 1 :(得分:1)
让destinationViewController始终添加一个activityIndicator并在viewWillAppear中...如果你不再需要它就隐藏它
或者将标志传递给prepareForSegue中的destinationViewController。
您不应该将UISegue继承为子类!