2016-01-20 42 views
0

在我的iOS项目中,我使用了两种UIStoryboardSegue,它们在导航控制器中或作为模态视图呈现视图。我在Interface Builder中的那种属性:如何识别StoryboardSegue的种类

  • 显示(例如推送)
  • 当前模态

现在我希望能够以编程方式确定那种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。但是,我还是需要的标志,以定制外观..

感谢

+0

在此期间我找到了解决的主要问题,这是确定的ViewController是否是模式与否:http://stackoverflow.com/questions/2798653/is-it-possible-到确定,无论视图控制器-IS-提出,作为模态。但如果有人感兴趣,这个问题仍然没有答案。 –

回答

0

也许我是完全错误的,但你不能使用SEGUE的标识?

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

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if segue.identifier.hasPrefix("Modal") { 
     let vc = segue.destinationViewController as! ViewController 
     vc.isModal = TODO 
    } 
} 
+0

是的,你可以命名所有Segues,但我不喜欢这个想法,你需要命名所有Segues(容易忘记)。我的意思是,这应该是一个模态segue的信息已经存在某处,所以它以一个前缀的形式复制它有点多余。它依赖于字符串比较......在我看来,应该可以只查询一种属性或进行课堂检查。 –

+0

类比内省比字符串比较更昂贵。您也可以使用switch语句对segue标识符使用枚举类型。 – vadian