2016-01-20 26 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