Навигация rootView Проблема с контроллером с кнопкой выхода HomeVC в Swift - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть контроллер домашнего просмотра с ENSideMenu для бокового меню, а в контроллере домашнего просмотра у меня есть кнопка выхода.Я дал ENSideMenu MyNavigationController в качестве начального контроллера представления в раскадровке.

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

Вот мой код:

в appdelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let userId: String? = KeychainWrapper.standard.string(forKey: "Uid") 
    print("appdelegate userid \(userId)")
    if userId != nil{
        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let homeVC = mainStoryBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
        self.window!.rootViewController = homeVC
    }
    return true
}

в loginButton in LogInVC:

    let saveUserId: Bool = KeychainWrapper.standard.set(Uid ?? "", forKey: "Uid")
                print("the userid is \(saveUserId)")

                if (Uid?.isEmpty)!
                {
                    print("login fail")
                }
                else{

                    DispatchQueue.main.async {

                        let homeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
                        let appDelagate = UIApplication.shared.delegate
                        appDelagate?.window??.rootViewController = homeVC
                    }
                }

в HomeVC:

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "MakePaymentViewController") as! MakePaymentViewController
    self.navigationController?.pushViewController(nextViewController, animated: true)
    let indexPathHome = indexPath.row
    print("home collectionItem indexpath \(indexPathHome)")

}


 @IBAction func signOutButton(_ sender: Any) {
    print("signout tapped")
    KeychainWrapper.standard.remove(key: "Uid")
 }

  @IBAction func sideMenuButton(_ sender: Any) {
    print("in side menu")
    toggleSideMenuView()
 }

Я дал ENSideMenu MyNavigationController в качестве начального контроллера представления в раскадровке.

Мне нужен homeVc для ответа после входа в систему.пожалуйста, помогите мне решить проблему.

1 Ответ

2 голосов
/ 24 сентября 2019

Вы используете пользовательский MyNavigationController с HomeViewController для целей навигации - вы уже упоминали, что это ваш первоначальный вид в раскадровке.Но ... есть два других места, где вы загружаете HomeViewController без MyNavigationController:

  1. AppDelegate

изменить загрузку HomeViewController:

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
window?.rootViewController = mainStoryBoard.instantiateViewController(withIdentifier: "MyNavigationController")
LoginViewController

Изменить

let homeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
let navigationController = UINavigationController(rootViewController: homeVC)

на

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = mainStoryBoard.instantiateViewController(withIdentifier: "MyNavigationController")

Кроме того, у меня есть несколько советов для вас:

  1. Избегайте ! в своем коде - это прямой способ сбить ваше приложение.Есть много других способов справиться с опционами
  2. Избегайте ловить сильные self в замыканиях (как в LoginViewController, когда вы меняете вид на HomeVC).Это приводит к сохранению цикла, что приводит к утечке памяти.
  3. Удалите все ненужные self с - и когда компилятор скажет вам, что вам нужно добавить self - посмотрите на пункт 2) и добавить weak self вместо strong.
  4. Удалить предупреждения компилятора - у вас уже есть 19 предупреждений, вы можете удалить их все за несколько минут.
...