Как повторно использовать View Controller в проекте с использованием storyboard?

Разбирался с использованием стандартного шаблона Master-Detail Application. Попытался повторно использовать сцену Detail Scene (DetailViewController) для целей добавления нового объекта. Создал новый класс, унаследовал его от DetailViewController, вызываю контроллер в методе insertNewObject, контроллер отображается, но почему-то отображается родительский DetailViewController (смотрел в отладчике, используется именно родительский класс).

Может быть что-то не так сделал? Или все же нужно новую сцену создавать?

Проект можно посмотреть здесь: https://github.com/pchelnikov/DrinkMixer
  • Вопрос задан
  • 3257 просмотров
Решения вопроса 1
Flanker_4
@Flanker_4
У Вас не получится так сделать. Storyboard всегда грузит указанный в свойствах класс. И даже попытки поиграться с рантаймом не дают никакого эффекта: я пробовал переопределять initWithCoder и возвращать класс наследник. Приложение падает с пометкой, что ожидается другой класс на выходе. Т.е. после загрузки storyboard проверяет что бы все было чин чином...

Что можно сделать, что бы решить Вашу проблему:
- создавать вьюшку для viewController'a кодом (-loadView), т.е. отказаться от Storyboard. Субьективно, не самое лучшее решение.
- В самом storyboard продублировать viewController, указав нужный класс для него. Самое быстрое решение, но Вам прийдется поддерживать по сути два одинаковых представления. Если позже нужно будет допиливать проект, то Вы очень обрадуетесь:)
- использовать xib для таких дублирующихся viewController'ов. Насколько я помню initWithNib позволит корректно загрузить вьюшку в класс наследник. Неуверен в этом, правда...
- сделать Add view controller контейнером, содержащим DetailController. Т.е. Загружать detailController из storyboard'a и добавлять его посредством addSubview в AddViewController. Или еще одно извращение из той же оперы , вытащить из этого загруженого DetailViewController'a саму вьюшку, установивть корректно outlets и actions и убить загруженный вью контроллер. У меня так получилось, но это все от лукавого.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы