2016-01-20 5 views
0

В моем проекте iOS я использую два вида UIStoryboardSegue, которые представляют представление как внутри навигационного контроллера, так и в виде модального вида. Я установил доброе свойство в Interface Builder для:Как определить тип StoryboardSegue

  • Show (например, Push)
  • Present модально

Теперь я хочу, чтобы иметь возможность программно определить вид 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- к определить, является ли-ViewController-это представил, как-покадрово. Но этот вопрос остается без ответа, если кто-то заинтересован. –

ответ

0

Может быть, я совершенно неправильно, но вы не можете использовать идентификатор Segue?

Например, назовите все контроллеры modal с 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, уже существует где-то, поэтому он чувствует себя немного избыточным, чтобы дублировать его в виде префикса. И он полагается на сравнение String ... По-моему, должно быть возможно просто запросить атрибут вида или провести проверку класса. –

+0

Интроспекция класса дороже, чем сравнение строк. Вы также можете использовать тип перечисления для идентификаторов segue с помощью оператора switch. – vadian

Смежные вопросы