Не могу отклонить вид контроллера после его представления

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

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

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

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 ответа

Попробуй это

self.presentingViewController?.dismiss(animated: true, completion: nil)

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

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

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

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

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

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

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

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

Другие вопросы по тегам