Я использую UISegmentedControl в панели навигации для переключения между UIViewControllers в моем приложении. Однако UISegmentedControl исчезает с панели навигации после нескольких переключений UIViewControls. Это происходит только тогда, когда элементы управления представлением не инициализируются и не распределяются заново каждый раз при нажатии сегментированного элемента управления. Другими словами, если я назначаю новый UIViewController каждый раз, когда я хочу переключить представления в моем приложении, наблюдается ожидаемое поведение (например, UISegmentedControl не исчезает). Однако это не практичное решение, так как я хочу сохранить состояние скрытого представления, когда пользователь переключает представления.
У меня здесь репозиторий простого проекта, где это наблюдается. Проект состоит из двух коммитов: более старый, где эта проблема наблюдается, и более новый, где проблема «решается» путем постоянного повторного создания экземпляра.
Подробнее о предыдущем коммите в этом репо:
didFinishLaunchingWithOptions
в accountingAppDelegate - это то, где два контроллера представления для приложения (RootViewController и CalendarViewController) оба созданы для жизненного цикла приложения.
UISegmentedControl загружается из файла NIB с именем SegmentedControl.xib в методе didFinishLaunchingWithOptions
.
Метод toolBarItems
в accountingAppDelegate является вспомогательным методом для обоих методов viewDidAppear
viewcontroller, где установлено свойство toolbarItems
каждого viewcontroller. UINavigationController просматривает это свойство, чтобы назначить элементы на панели инструментов навигации для текущего представления, исходя из моего понимания Apple docs (см. «Отображение панели инструментов»).
Единственное отличие от новой фиксации состоит в том, что новые экземпляры RootViewController и CalendarViewController создаются каждый раз, когда пользователь переключается с одного на другой.
Мой вопрос таков: почему постоянное повторное создание решает проблему? И что более важно, могу ли я предотвратить исчезновение UISegmentedControl и для сохранения состояний просмотра моего приложения?