Вызовите функцию из AppDelegate и используйте эту функцию для выполнения перехода. - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь вызвать функцию из AppDelegate, и с помощью этой функции я пытаюсь выполнить segue.

My Storyboard
(Нажмите на изображение, чтобы увеличить)

func doSegue (_ verification : Bool) {
    if verification {
        print ("Segue performed")
        LoginVC ()
        .performSegue (withIdentifier: "tosignup", sender: nil)
    }
    else { print("An error occured while login") }
}
func btnremove () {
    print ("Segue performed 1")
    loginbtn.isHidden = true doSegue (true)
}

Это ошибки, которые вышли за рамки исполнения.

These are the errors which came beyond execution.

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

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

Сначала в делегате приложения вы находитесьПотребуется добавить свойство для ссылки на контроллер вида входа в систему, например:

public var loginVC: LoginVC?

Теперь в контроллере вида входа в систему вы можете установить это свойство следующим образом в viewDidLoad:

    // Get the app delegate ensuring it is the right type.
    if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
        appDelegate.loginVC = self
    }

Затем, вернувшись в делегат приложения, вы можете использовать это свойство в методе doSegue следующим образом:

func doSegue (_ verification : Bool) {
    // Ensure that the loginVC property has been set and if not we can't perform the segue.
    guard let loginVC = self.loginVC else {
        print ("The login view controller is not presented")

        return
    }

    if verification {
        print ("Segue performed")
        // Use the property to perform the segue.
        loginVC.performSegue(withIdentifier: "tosignup", sender: nil)
    }
    else { print("An error occured while login") }
}

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

0 голосов
/ 10 марта 2019

Если вы не делаете ничего особенного в prepareForSegue в LoginVC, вы можете запустить корневой контроллер представления в AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    if (verification) {
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginVC")

        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    } else {
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "SignupformVC")

        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    }

    return true
}

Также вам следует установить идентификатор для ваших контроллеров представления.

...