如何识别 StoryboardSegue 的种类

Posted

技术标签:

【中文标题】如何识别 StoryboardSegue 的种类【英文标题】:How to identify the kind of StoryboardSegue 【发布时间】:2016-01-20 19:22:20 【问题描述】:

在我的 ios 项目中,我使用了两种 UIStoryboardSegue,它们在导航控制器中或作为模态视图呈现视图。我将 Interface Builder 中的 kind 属性设置为:

显示(例如推送) 模态呈现

现在我希望能够以编程方式识别 segue 的种类,以便自定义 ViewController 的外观。像这样:

class ViewController : UIViewController 
    var isModal : Bool = false
    ...


class OtherViewController : ViewController 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        if segue.destinationViewController is ViewController 
            let vc = segue.destinationViewController as! ViewController
            vc.isModal = TODO
        
    

我希望会有一处房产,但我找不到。我也希望 segue 类会有所不同,但我也找不到足够的文档。

我最初偶然发现了这个问题,试图使用 isModal 来交替关闭 ViewController 和弹出 ViewController。我注意到现在似乎有一个更好的选择,那就是 UnwindSegue。但是,我仍然需要标志来自定义外观..

谢谢

【问题讨论】:

与此同时,我找到了解决主要问题的方法,即识别 ViewController 是否是模态的:***.com/questions/2798653/…。但是,如果有人感兴趣,这个问题仍然没有答案。 【参考方案1】:

也许我完全错了,但你不能使用 segue 的标识符吗?

例如,用Modal<Name> 命名所有模态视图控制器。然后检查

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

    if segue.identifier.hasPrefix("Modal") 
        let vc = segue.destinationViewController as! ViewController
        vc.isModal = TODO
    

【讨论】:

是的,您可以命名所有 Segue,但我不喜欢您需要命名所有 Segue(容易忘记)的想法。我的意思是,这应该是模态转义的信息已经存在于某个地方,所以以前缀的形式复制它感觉有点多余。它依赖于字符串比较......在我看来,应该可以只查询一种属性或进行类检查。 类内省比字符串比较更昂贵。您还可以使用带有 switch 语句的 segue 标识符的枚举类型。

以上是关于如何识别 StoryboardSegue 的种类的主要内容,如果未能解决你的问题,请参考以下文章

无法为多个 segue 重用自定义 StoryboardSegue 类

机器视觉识别技术有些啥种类

车牌识别支持图片视频识别,识别车牌种类全

车票识别SDK二次开发

基于SVM的数据分类预測——意大利葡萄酒种类识别

如何辨别护照的种类