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

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

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

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

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()

person Hanafi Hisyam    schedule 13.09.2018    source источник
comment
В вашем коде нет ничего плохого. Однако это тоже не совсем понятно. Нам не нужно видеть файлы cookie и связки ключей, поскольку они не имеют отношения к делу. Нам действительно нужно знать, где и когда вы запускаете код для загрузки логина. А на каком экране выход из системы? Раньше я видел подобные проблемы в Code, который использует несколько экземпляров UIWindow и неправильно ими управляет, поэтому я бы также спросил, делаете ли вы что-нибудь подобное или, возможно, переключаете контроллеры корневого представления.   -  person drekka    schedule 13.09.2018
comment
Может быть, это мой контроллер rootview? Я немного проверил в AppDelegate. Если есть пользователь, сразу покажите контроллер панели вкладок, иначе покажите контроллер просмотра входа   -  person Hanafi Hisyam    schedule 13.09.2018


Ответы (3)


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

DispatchQueue.main.async {
    self.view.window!.rootViewController?.dismiss(animated: true, completion: {
       print("All controller dismissed successfully..")
    })
}
person Mahesh Dangar    schedule 13.09.2018
comment
Пробовал этот код раньше. Это работает только при первом входе в систему, я могу выйти из системы. Если есть уже зарегистрированный пользователь и показать главный экран. Я не могу нажать кнопку выхода - person Hanafi Hisyam; 13.09.2018
comment
@HanafiHisyam, если ваш контроллер представлен, этот код должен работать, потому что он отклоняет все контроллеры окна, вы должны снова попробовать этот код сейчас. - person Mahesh Dangar; 13.09.2018

Попробуйте это

self.presentingViewController?.dismiss(animated: true, completion: nil)
person Amul4608    schedule 13.09.2018

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

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

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

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

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

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

person drekka    schedule 14.09.2018