Как определить тип StoryboardSegue

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

  • Показать (например, нажать)
  • Присутствует модально

Теперь я хочу иметь возможность программно идентифицировать тип перехода, чтобы настроить внешний вид моего 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
        }
    }
}

Я надеялся, что там будет недвижимость, но я не могу ее найти. Я также надеялся, что класс перехода будет отличаться, но я также не могу найти достаточно документации.

Первоначально я наткнулся на эту проблему, пытаясь использовать isModal, чтобы чередовать отклонение ViewController и открытие ViewController. Я заметил, что теперь есть лучшая альтернатива — UnwindSegue. Однако мне все еще нужен флаг, чтобы настроить внешний вид.

Спасибо


person Eduard Feicho    schedule 20.01.2016    source источник
comment
Тем временем я нашел решение основной проблемы, заключающейся в том, чтобы определить, является ли ViewController модальным или нет: stackoverflow.com/questions/2798653/. Но этот вопрос остается без ответа, если кому интересно.   -  person Eduard Feicho    schedule 20.01.2016


Ответы (1)


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

Например, назовите все контроллеры модального представления с помощью Modal<Name>. Затем проверьте

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{
    if segue.identifier.hasPrefix("Modal") {
        let vc = segue.destinationViewController as! ViewController
        vc.isModal = TODO
    }
}
person vadian    schedule 20.01.2016
comment
Да, вы можете назвать все переходы, но мне не нравится идея, что вам нужно назвать все переходы (легко забыть). Я имею в виду, что информация о том, что это должен быть модальный переход, уже где-то существует, поэтому кажется немного избыточным дублировать ее в виде префикса. И это зависит от сравнения строк... На мой взгляд, должна быть возможность просто запросить атрибут вида или выполнить проверку класса. - person Eduard Feicho; 21.01.2016
comment
Самоанализ класса дороже, чем сравнение строк. Вы также можете использовать тип enum для идентификаторов перехода с оператором switch. - person vadian; 21.01.2016