iphone - performSegueWithIdentifier 触发但不加载下一个 View

标签 iphone ios objective-c

在我的 Storyboard中,我有一个 NavViewController,它将 Root View 设置为 ViewController1。 ViewController1 然后使用标识符“socialSeg”向 ViewController2 推送 segue。 ViewController1 有一个 UIImageView,我用它来加载摄像机。在用户录制视频并选择“使用”后,我想加载下一个 View Controller 。在 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 .基本上“视频 View Controller ”将是 ViewController1,而“社交 View Controller ”将是 ViewController2。当我单击“ Root View Controller ”按钮(录制视频)时,该 segue 工作正常,这就是我将其排除在外的原因。 “Root View Controller”是否有可能抛出问题?

最佳答案

您的performSegue 代码没有任何问题。当您执行此 Segue 时,您的选择器动画似乎仍在运行。尝试通过如下所示修改当前调用,在 presentViewController 的完成 block 中调用 performSegue

[imagePickerController presentViewController:YES completion:^() {
    NSLog(@"Performing Segue with ID");
    [self performSegueWithIdentifier:@"socialSeg" sender:self];
}];

请确保将 imagePickerController 替换为您的弹出图像选择器 Controller 的名称。

这不是理想的解决方案,但您也可以延迟执行您的 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];
    });
}

注意:问题是当 performSegue 尝试启动另一个动画以加载下一个 View Controller 。由于一个动画尚未完成,因此 performSegue 动画将被忽略并且 View Controller 不会加载。

这里有一个相关的问答: performSegueWithIdentifier not working

关于iphone - performSegueWithIdentifier 触发但不加载下一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885716/

相关文章:

ios - 以编程方式设置 UIButton 的中心 - SWIFT

iphone - Matt Gallagher 的 UITableView(重访)+ NSFetchedResultsController

ios - iOS 启动图像下会发生什么?

objective-c - 在 Objective-C 中解析 JSON 的首选数据类型是什么?

ios - ObjC - 为什么允许实例访问 .m 文件中的类扩展属性?

iphone - filterContentForSearchText 委托(delegate)方法中的 "scope"参数应包含什么?

ios - Cloudkit获取数据(字符串和图像资源)在调用后需要很长时间才能出现

ios - 从详细 View 禁用/启用后退按钮

ios - iPhone XS 最大 | swift 4.2 |应用程序崩溃 libsystem_kernel.dylib abort_with_payload_wrapper_internal + 104

iphone - 我的 MoviePlayer 不响应功能