Я использую UISegmentedControl в навигационной панели для переключения между UIViewControllers в моем приложении. Тем не менее, UISegmentedControl исчезает с панели навигации после того, как я переключаю UIViewControls более одного раза. Это происходит только тогда, когда элементы управления представлением не инициализируются и не назначаются заново каждый раз при нажатии сегментированного элемента управления. Другими словами, если я выделяю новый UIViewController каждый раз, когда я хочу переключать представления в своем приложении, наблюдается ожидаемое поведение (например, UISegmentedControl не исчезает). Однако это не практическое решение, так как я хочу сохранить состояние скрытого представления, когда пользователь переключает представления.UISegmentedControl в UINavigationBar исчезает, когда UIViewControllers не постоянно повторно создаются.
У меня есть here репо простого проекта, где это наблюдается. Проект состоит из двух коммитов: старший, где эта проблема наблюдается, и более новая, где проблема «решается» путем постоянного повторного создания.
Более подробно о ранее фиксации в этом репо:
didFinishLaunchingWithOptions
в accountingAppDelegate где два контроллера вида для приложения (RootViewController и CalendarViewController) оба экземпляра для жизни приложения.
UISegmentedControl загружается из файла NIB с именем SegmentedControl.xib в методе didFinishLaunchingWithOptions
.
toolBarItems
метод в accountingAppDelegate удобный метод для viewDidAppear
методов как ViewController в, где toolbarItems
свойство каждого ViewController устанавливается. UINavigationController просматривает это свойство, чтобы назначить элементы в панели навигации для текущего представления, из моего понимания the Apple docs (посмотрите «Отображение панели инструментов»).
Единственная разница с новой фиксацией заключается в том, что новые экземпляры RootViewController и CalendarViewController создаются каждый раз, когда пользователь переключается с одного на другой.
Мой вопрос: почему постоянная рекомбинация решает проблему? И что еще более важно, могу ли я предотвратить исчезновение UISegmentedControl и сохранить состояния представления моего приложения?
Если я правильно понимаю ваш код, это то, что вы делаете: 1. Вы создаете экземпляр UINavigationController в своем приложении appDelegate. 2. Вы создаете экземпляр RootViewController, который я предполагаю как пользовательский класс UIViewController. 3. Вы создаете экземпляр CalendarViewController, - пользовательский класс UIViewController. 4. Вы меняете их как rootViewController UINavigationController (в пуле 1). Правильно ли это? – Canopus
Да. это верно. В частности, я использую метод setViewControllers: UINavigationController для косвенного изменения свойства rootViewController для UINavigationController. См. Метод indexDidChangeForSegmentedControl в accountappdelegate, чтобы узнать, где это происходит. – Coder