如何识别 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 的种类的主要内容,如果未能解决你的问题,请参考以下文章