当前位置: 首页 > 面试题库 >

Swift中的自定义Segue

祁飞扬
2023-03-14
问题内容
@objc(SEPushNoAnimationSegue)
class SEPushNoAnimationSegue: UIStoryboardSegue {
    override func perform () {
      self.sourceViewController.navigationController.pushViewController(self.destinationViewController, animated:false)
    }
}

在上面的代码中,我有2个问题:1)。它具有编译错误:’UINavigationController!’ 没有名为“
pushViewController”的成员

但是在该类中,确实有一个pushViewController方法。

2)。我必须添加注释:@objc(SEPushNoAnimationSegue),否则,在情节提要中,它只能识别随机生成的名称,例如_tcxxxxSEPushNoAnimationSegue。

为什么这两个问题在这里发生?


问题答案:

UIStoryboardSegue有一个令人烦恼的缺陷:它的sourceViewController和destinationViewController属性的键入方式为AnyObject!(即使在Objective-C(Id类型)中也是如此),而不是UIViewController应该的方式。

相同的缺陷会给您的完美和简单的代码造成破坏。这是重写它的方法,以修复编译错误:

@objc(SEPushNoAnimationSegue)
class SEPushNoAnimationSegue: UIStoryboardSegue {
    override func perform () {
        let src = self.sourceViewController as UIViewController
        let dst = self.destinationViewController as UIViewController
        src.navigationController.pushViewController(dst, animated:false)
    }
}

注:苹果在iOS中9固定这个东西sourceViewControllerdestinationViewController现在被正确声明为UIViewController

第2期

Swift编译器使用其自己的名称mangling来存储其符号,并且很好的,Objective-
C在Xcode中无法识别它。使用显式即可@obj()解决问题。



 类似资料:
  • 问题内容: 这是我的自定义Segue的代码 我以为这可行,但实际上只有在执行segue后,视图才会改变。我应该怎么做才能使视图在中间出现“翻转”时发生变化? 提前致谢。 问题答案: 从iOS 7开始,我们通常不使用自定义序列为过渡设置动画。我们要么使用标准的模态演示,指定一个(即,可以为模态过渡选择的一些动画的固定列表),要么实现自定义动画过渡。这两个描述如下: 如果仅显示另一个视图控制器的视图,

  • 问题内容: 它允许您从调用中返回子类。 我正在尝试找出使用Swift实现相同功能的最佳方法。 我确实知道,很可能有一种更好的方法可以用Swift实现相同的目的。但是,我的类将由我无法控制的现有Obj- C库初始化。因此,它确实需要以这种方式工作并且可以从Obj-C调用。 任何指针将不胜感激。 问题答案: 我不相信Swift可以直接支持这种模式,因为初始化程序不会像在Objective C中那样返回

  • 问题内容: 我正在使用Swift在Xcode(7.0版)中创建游戏,并且我想在游戏结束时以字体“ gameOver.ttf”显示标签“ Game Over”。我已将字体添加到资源文件夹中。我不知道如何在我的代码中引用它。我可以帮忙吗?我的代码: 问题答案: 这些是向您的应用程序添加自定义字体的步骤: 在您的应用程序中添加“ gameOver.ttf”字体(确保它已包含在目标中) 修改applica

  • 在自定义arrayAdapter中实现自定义getFilter时遇到问题。实际上,我不知道如何实现它。尝试了各种代码,但仍然没有成功。这是我的自定义阵列适配器。 这是ListTO课程。 这是布局图。 这里的搜索关键字来自“inputSearch”编辑文本。 这是文本更改的侦听器。 谢谢

  • 问题内容: 我正在尝试快速过滤自定义对象的数组,以获取具有我要隔离的属性的数据子集。我的代码如下。 我的自定义对象如下: 但是,尝试编译此代码时,Xcode引发的错误是: 我正在使用Swift 1.2,似乎无法弄清楚自己在做什么。任何帮助,将不胜感激。 问题答案: 在Swift 1.2中,是一个全局函数,因此您不能说。(在Swift 2中,这将起作用。) 此外,不能与此类字符串一起使用。我建议使用

  • 如何向Swift中的子类添加自定义初始化器? 我创建了的一个子类,它看起来如下所示: 如果我加上这个,Xcode会抱怨处初始化。所以我想这也不是解决办法。所以我想知道如何在Swift中将自定义初始化器正确地添加到子类中(因为在Objective-C中这似乎不是问题)?