在我的故事板中,我有一个NavViewController,它将根视图设置为ViewController1。 ViewController1然后使用标识符“socialSeg”推送到ViewController2。 ViewController1有一个UIImageView,用于加载摄像机。用户录制视频并选择“使用”后,我想加载下一个视图控制器。在ViewController1.m中,我有以下内容:
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"Performing Segue with ID");
[self performSegueWithIdentifier:@"socialSeg" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"Prepping");
}
两个NSLog都运行,但我的屏幕上没有任何反应。我没有看到ViewController2,也没有弹出错误消息。我这样做是对的吗?
相关问题:我应该在self(当前的ViewController)上运行performSegueWithIdentifier,还是应该在self.navigationController上运行?
编辑:我试图缩短我的问题,以缩短帖子,我意识到你可能需要更多的背景。
这是我的full storyboard。基本上“Video View Controller”是ViewController1,“Social View Controller”是ViewController2。当我点击“根视图控制器”按钮(录制视频)时,该segue工作正常,这就是我将其删除的原因。 “根视图控制器”是否有可能丢掉任何东西?
答案 0 :(得分:3)
您的performSegue
代码没有任何问题。当您执行此Segue时,似乎您的选择器动画仍在运行。请尝试通过修改您当前的通话,在performSegue
的完成区中致电presentViewController
。
[imagePickerController presentViewController:YES completion:^() {
NSLog(@"Performing Segue with ID");
[self performSegueWithIdentifier:@"socialSeg" sender:self];
}];
请确保将imagePickerController
替换为弹出式图像选择器控制器的名称。
它不是理想的解决方案,但您也可以延迟执行您的performSegue,以确保您的图像选择器动画已停止:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//1.5 is number of seconds its going to wait before executing the block of code
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
NSLog(@"Performing Segue with ID");
[self performSegueWithIdentifier:@"socialSeg" sender:self];
});
}
注意: 问题是图片选择器弹出动画仍在进行中(在用户选择图像或视频后关闭选择器){ {1}}尝试启动另一个动画以加载下一个视图控制器。由于一个动画尚未完成,因此performSegue
动画被忽略,视图控制器无法加载。
以下是相关的问题和答案: performSegueWithIdentifier not working