当前位置: 首页 > 知识库问答 >
问题:

放松Segue不工作在iOS8

程博学
2023-03-14

我有一个应用程序,它在iOS 7下运行良好,但当为iOS 8构建时,放松段无法工作。

我创建了一个新项目,并添加了一个模态(带有tableview控制器的导航控制器),并尝试使用一个展开模态。不幸的是,它也不起作用。正在展开到的方法在解压缩视图控制器中。展开segue是通过故事板(桌面视图控制器中的导航栏按钮)创建的。当我点击按钮时,什么都不会发生。没有日志输出,模态也不会消失。它似乎也只影响模态序列。推/弹出正常展开。

有没有人有类似的问题,并有一个想法,我可以解决它?

共有3个答案

齐嘉庆
2023-03-14

这是iOS 8.0、8.0.1和8.0.2的一个问题。它在8.1中得到解决;展开分段正在调用适当的方法。

请注意,在iOS 8上,与iOS 7不同,在执行展开序列时,模式显示的视图控制器可能不会自动关闭。为了确保它总是被撤销,您可以检测它是否被撤销,如果没有,则手动撤销它。这些不一致在iOS 9.0中得到解决。

随着iOS8.4在iPhone上运行,所有的模态呈现的segue与所有的演示风格都在松开时消失,除了全屏和当前上下文。iPad也是如此,增加了表格和页面表格也不会自动删除。使用iOS9,所有演示文稿风格都可以在iPhone和iPad上自动关闭。

施茂
2023-03-14

[更新:iOS 8.1测试版上的Bug已修复,但您需要它来支持8.0和8.0.2版本]

我唯一能让我的放松序列发挥作用的方法就是混合阿迪蒂亚和维鲁斯的答案。

我的设置进入:[查看控制器1]

放松:[视图控制器2]

修正:子类化[Navigation Controller],添加一个名为sourceViewController的属性,并在从[View Controller 1]转到[Navigation Controller]时调用prepare for segue时将“self”传递给该属性

在[导航控制器]子类中. m重写/添加这两个方法:

- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
{

    if ([self.sourceViewController canPerformUnwindSegueAction:action fromViewController:fromViewController withSender:sender]) {
    return self.sourceViewController;
    }
    return [super viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];   
}

然后我在[导航控制器]子类中重写它,只是因为我有一个自定义的展开segue:

- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier {
   return [fromViewController segueForUnwindingToViewController:toViewController
                                          fromViewController:fromViewController
                                                  identifier:identifier];
}
昌和悦
2023-03-14

苹果已经在iOS 8.1中修复了这个错误

8.0iOS临时解决方案

解除segue不会只在下一个情况下工作:

视图结构:UITabBarController-

通常(在iOS 7、8.1中),当从UIViewController2展开到UIViewController1时,它会在UIViewController1中调用viewControllerForUnwindSegueAction。

但是在iOS 8.0和8.0中。x、 它将在UIAbbarController中调用viewControllerForUnwindSegueAction,而不是UIViewController1,这就是unwind segue不再工作的原因。

解决方案:通过创建自定义UITabBarController并使用自定义UITabBarController,在UITabBarController中覆盖viewControllerForUnwindSegueAction。

斯威夫特

CustomTabBarController。敏捷的

import UIKit

class CustomTabBarController: UITabBarController {

    override func viewControllerForUnwindSegueAction(action: Selector, fromViewController: UIViewController, withSender sender: AnyObject?) -> UIViewController? {
        var resultVC = self.selectedViewController?.viewControllerForUnwindSegueAction(action, fromViewController: fromViewController, withSender: sender)
        return resultVC
    }

}

对于旧学校Object-C

自定义标签

#import <UIKit/UIKit.h>

@interface CustomTabBarController : UITabBarController

@end

CustomTabBarController。M

#import "CustomTabBarController.h"

@interface CustomTabBarController ()

@end

@implementation CustomTabBarController

    -(UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
    {
        return [self.selectedViewController viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];
    }

@end

==============================================================================

不要使用以下任何解决方案(它们已经过时,仅供参考)

最新更新于9月23日

我的新解决方案是推送到一个嵌入导航控制器中的视图,并将导航控制器配置为在推送时隐藏底部栏(IB中的勾选框)。然后你会有一个看起来像模态视图的视图,唯一不同的是推和弹出的动画。如果你愿意,你可以定制

更新:下面的解决方案实际上在选项卡栏下呈现模态视图,这将导致进一步的视图布局问题。

将segue类型更改为Present因为Popover将只在iOS8上工作,在iOS7上,您的应用程序将崩溃。

同样,为了解决这个问题,我将segue的演示设置为当前上下文(我的应用程序仅适用于iphone)。

默认和全屏将不工作。

 类似资料:
  • 问题内容: 我面临的问题是我正在尝试返回一个对象列表(带有注释),但出现了500个服务器错误代码: 服务器遇到内部错误(找不到媒体类型:application / json的类型为java.util.ArrayList的响应对象的MessageBodyWriter),导致该服务器无法满足此请求。 您能否提供一些建议以解决此问题? 我不确定确切的位置。 谢谢。 问题答案: 您应该使用interfac

  • Segue是一个课程内容管理系统(CMS),专门用于教学,学习和研究。结合了简单易用的课程管理系统的灵活性,博客类型的网站包括课程,新闻和杂志。 它基本上是一种合成的维基, 博客和传统的内容管理系统。它借用了博客的概念,多个条目在网页上,每一个都有自己的网址和所附的评论。它提供了每篇文章的历史版本,并允许用户使用“维 基”的标记。当一个“维基链接”创建内容不存在,一个“创建节点”链接显示,允许用户

  • 本文向大家介绍教你轻松制作java音乐播放器,包括了教你轻松制作java音乐播放器的使用技巧和注意事项,需要的朋友参考一下 一、音乐播放器的实现原理  Javase的多媒体功能很弱,所以有一个专门处理多媒体的插件叫JMF,JMF提供的模型可大致分为七类 * 数据源(Data source) * 截取设备(Capture Device,包括视频和音频截取设备) * 播放器(Player) * 处理器

  • 问题内容: 我有两个VC:VC1和VC2。在VC1中,我有一个以编程方式制作的,并且我想传递给VC2。 我知道如何在情节提要中制作Segue,但由于这是通过编程方式制作的,因此目前我不能这样做。 如果我想使用segue传递结果数组,是否有办法以编程方式进行segue?如果这不可能,我是否应该只使用VC2 并设置一个委托来传递? 问题答案: 您可以像在此答案中建议的那样进行操作: Instantia

  • 9.7. Segue OK,that's it for the hard-core XML stuff. 下一章将继续使用相同的示例程序,但是焦点在于能使程序更加灵活的其它方面:使用输入流处理,使用 getattr 进行方法分发,并使用命令行标识允许用户重新配置程序而无需修改代码。 在进入下一章前,你应该没有困难的完成这些事情: 使用 minidom 解析 XML 文档 ,搜索已解析文档,并以任意

  • Segue 是一个开源协作的内容管理系统,设计的目的是为了电子学习,将课程管理系统的易用性与博客的灵活性相结合,用于创建各种类型的网站,包括课程,新闻和杂志。