【问题标题】:How to identify the kind of StoryboardSegue如何识别 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 是否是模态的:stackoverflow.com/questions/2798653/…。但是,如果有人感兴趣,这个问题仍然没有答案。

标签: ios uistoryboardsegue


【解决方案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 标识符的枚举类型。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2021-06-04
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多