Не могу отклонить вид контроллера после его представления - PullRequest
0 голосов
/ 13 сентября 2018

После представления контроллера панели вкладок я не могу отклонить контроллер панели вкладок. Я также не могу даже нажать свою кнопку после переустановки без удаления приложения. Необходимо удалить и переустановить приложение, затем я могу нажать на кнопку

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

Это мой текущий способ представить контроллер после входа в систему

let storyboard = UIStoryboard.init(name: "Main", bundle: Bundle.main)
let loginVC = storyboard.instantiateViewController(withIdentifier: "Home")
self.present(loginVC, animated: true, completion: nil)

Это мой текущий способ уволить контроллер

@IBAction func btnLogout_TouchUpInside(_ sender: Any) {
    dismiss(animated: true, completion: nil)
  }

Это мой корневой вид

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        if defaults.bool(forKey: "isLoggedIn") {
            // Show Home screen
            window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "Home")

        } else {
            // Show Login screen
            window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "Login")
        }
        window?.makeKeyAndVisible()

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Попробуйте

self.presentingViewController?.dismiss(animated: true, completion: nil)
0 голосов
/ 14 сентября 2018

Хм.Ваше обновление помогает, хотя я все еще не уверен, что происходит.Я предполагаю, что вы устанавливаете логин как root, а затем представляете home.Но я не уверен, где или что вы пытаетесь отклонить.Если он входит в логин, то нечего отклонять, поскольку он является корневым контроллером представления.

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

Я бы установил контроллер домашнего просмотра в качестве начального контроллера представления и установил раскадровку Main как раскадровку для загрузки в настройках приложений.Тогда весь код для загрузки раскадровки и установки корневого контроллера представления может быть удален.

Далее я бы сделал ручной модальный переход от контроллера домашнего просмотра к контроллеру входа в систему.Затем в viewDidAppear контроллера home view я бы добавил код, чтобы решить, нужен ли вход в систему, и чтобы они выполняли процедуру входа в систему.

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

Это всего лишь один из многих способов сделать это, но это довольно простопошли.Вам не нужен код для загрузки или установки контроллеров корневого представления или чего-либо еще.Это просто позволяет раскадровке сделать всю работу за вас.

0 голосов
/ 13 сентября 2018

попробуйте отклонить все представленные контроллеры, это может работать на вас

DispatchQueue.main.async {
    self.view.window!.rootViewController?.dismiss(animated: true, completion: {
       print("All controller dismissed successfully..")
    })
}
...