Проблемы с представлением контроллера представления от другого контроллера представления в swift - PullRequest
0 голосов
/ 22 апреля 2019

У меня проблемы с представлением контроллера вида от другого. Единственный способ, которым я смог достичь этого, это с помощью следующей строки кода:

UIApplication.shared.keyWindow?.rootViewController?.present(partyMemberPage, animated: false, completion: nil)

Вот вся эта функция:

func partyMemberPage() {
    let layout = UICollectionViewFlowLayout()
    let partyMemberPage = PartyMemberPage(collectionViewLayout: layout)
    UIApplication.shared.keyWindow?.rootViewController?.present(partyMemberPage, animated: false, completion: nil)

    print("from SplitButton")
}

Хотя приведенный выше код работает, мне любопытно, почему приведенный ниже код не работает. Все, что я пытаюсь, я получаю сообщение об ошибке, в котором говорится, что мне нужно инициализировать UICollectionView с параметром макета не-ноль.

self.present(partyPage, animated: true, completion: nil)

Я почти уверен, что у меня есть нужные предметы для использования self.present(), но я не могу заставить его работать на этом виртуальном канале.

PS: Мне также любопытно, когда стоит поменять rootViewController (как в первой строке кода) и когда допустимо просто модально представлять контроллеры представления. Мое приложение будет иметь дело с хранением небольшого количества данных, так что это лучший способ передачи этих данных в долгосрочной перспективе.

Вся помощь очень ценится. Я могу предоставить больше кода, если это необходимо. Я очень новичок в программировании и в целом, так что прости меня, если какая-то логика ошибочна. Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2019

Вы не должны вызывать корневое окно, чтобы представить контроллер представления, если вам абсолютно не нужно.По сути, вы рассматриваете контроллеры как вкладки в окне браузера.Возвращение к окну похоже на очистку всех вкладок (сорта).

Что касается того, почему self.present() не работает, может быть несколько причин.

Если вы используете раскадровку, вам нужно по-другому ссылаться на свое представление: P

Также попробуйте еще раз с self.present(), если выдает ошибку, прочитайте ее или опубликуете с вопросом

completion: nil не требуется.

Поскольку я точно не знаю, в каком вы положении, я дам вам несколько вариантов.Я буду называть первое представление VC1, а второе - VC2

  1. Обернуть VC1 в контроллере навигации, затем попытаться использовать .push ()
  2. Обернуть VC2 в навигацииконтроллер выглядит так: (я использую этот код в своем собственном проекте, чтобы я мог убедиться, что он работает)
 let loginView = UINavigationController(rootViewController: LoginViewController())
            loginView.modalTransitionStyle = .flipHorizontal
            self.present(loginView, animated: true) 
Укажите модальный переход, как у меня выше
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...