DetailViewController UISplitViewController равен нулю, если для параметра overrideUserInterfaceStyle установлено значениIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 DetailViewController UISplitViewController равен нулю, если для параметра overrideUserInterfaceStyle установлено значени

Сообщение Anonymous »


У меня есть UISplitViewController с двумя UINavigationControllers в качестве основного и подробного контроллеров представления, созданный с помощью Storyboard. Основной элемент имеет статический UITableViewController, и нажатие на строку приведет к загрузке подробного представления в навигационный контроллер подробного представления.

Все работает как положено, за исключением случая, когда я установил для overrideUserInterfaceStyle «темный режим». Когда это будет сделано, массив viewControllers UISplitViewController будет содержать только один элемент — основной контроллер представления.

Я попытался воссоздать проблему на упрощенном примере, и мне удалось воспроизвести проблему.

Воспроизводимый тестовый пример находится по адресу https://github.com/sridharrajagopal/TestApp

протокол RootSettingsViewControllerSelectionDelegate : AnyObject { функция viewControllerSelected (_ vc: String) } класс RootSettingsViewController: UITableViewController, MFMailComposeViewControllerDelegate { слабый делегат var: RootSettingsViewControllerSelectionDelegate? переопределить функцию viewDidLoad() { супер.viewDidLoad() if (UIDevice.current.userInterfaceIdiom == .pad) { пусть indexPath = IndexPath (строка: 0, раздел: 0) tableView.selectRow(at: indexPath, анимированный: true, ScrollPosition: UITableView.ScrollPosition.top) tableView.delegate?.tableView!(tableView, DidSelectRowAt: indexPath) } } переопределить func tableView (_ tableView: UITableView, DidSelectRowAt indexPath: IndexPath) { if (indexPath.section == 2 && indexPath.row == 2) { // Свяжитесь с нами по электронной почте() } else if (indexPath.section == 0 && indexPath.row == 0) { делегат?.viewControllerSelected("A") } else if (indexPath.section == 0 && indexPath.row == 1) { делегат?.viewControllerSelected("B") } else if (indexPath.section == 0 && indexPath.row == 2) { делегат?.viewControllerSelected("C") } если позволить DetailViewController = делегировать как? SettingsSecondaryNavigationViewController { SplitViewController?.showDetailViewController(detailViewController, отправитель: ноль) } } } класс SettingsSecondaryNavigationViewController: UINavigationController { переопределить init (nibName nibNameOrNil: String?, Bundle nibBundleOrNil: Bundle?) { super.init(nibName: nibNameOrNil, пакет: nibBundleOrNil) } требуется инициализация?(кодер aDecoder: NSCoder) { super.init(кодер: aDecoder) } переопределить функцию viewDidLoad() { супер.viewDidLoad() } } расширение SettingsSecondaryNavigationViewController: RootSettingsViewControllerSelectionDelegate { func viewControllerSelected (_ vc: String) { если (vc == "A") { пусть DetailViewController = UIViewController() DetailViewController.view.backgroundColor = .red self.viewControllers = [detailViewController] } иначе если (vc == "B") { пусть DetailViewController = UIViewController() DetailViewController.view.backgroundColor = .green self.viewControllers = [detailViewController] } еще если (vc == "C") { пусть DetailViewController = UIViewController() DetailViewController.view.backgroundColor = .blue self.viewControllers = [detailViewController] } иначе если (vc == "D") { пусть DetailViewController = UIViewController() DetailViewController.view.backgroundColor = .purple self.viewControllers = [detailViewController] } } } класс SettingsSplitViewController: UISplitViewController, UISplitViewControllerDelegate { переопределить функцию viewDidLoad() { супер.viewDidLoad() делегат = сам пусть DetailViewController = (self.viewControllers.last как? SettingsSecondaryNavigationViewController) пусть PrimaryViewController = (self.viewControllers.first как? UINavigationController)? .topViewController как? РутНастройкивиевконтроллер // Здесь он проваливается, поскольку DetailViewController равен нулю PrimaryViewController!.Delegate = DetailViewController! привилегированныйDisplayMode = UISplitViewController.DisplayMode.oneBesideSecondary } функция SplitViewController( _ SplitViewController: UISplitViewController, коллапсSecondaryвторичныйViewController: UIViewController, на PrimaryViewController: UIViewController ) -> Бул { вернуть истину } } Я сейчас в полном замешательстве. Если overrideUserInterfaceStyle имеет значение .light или .unspecified (соответствует системным настройкам), все работает нормально.

Я вижу, что при загрузке приложения viewDidLoad SettingsSecondaryNavigationViewController вызывается, когда overrideUserInterfaceStyle имеет значение .light или .unspecified (даже до загрузки фактического UISplitViewController, но не вызывается в режиме .dark).

Мой первый вопрос: нормально ли то, что я делаю, или есть какие-то внутренние проблемы, которые проявляются в виде проблемы с «темным режимом».

Будем очень признательны за любую информацию или подсказки!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»