#ios #swift #uiviewcontroller #appdelegate
#iOS #swift #uiviewcontroller #appdelegate
Вопрос:
Я пытаюсь вызвать функцию из AppDelegate и с помощью этой функции пытаюсь выполнить переход.
(Щелкните изображения, чтобы увеличить)
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)
}
Это ошибки, которые вышли за рамки выполнения.
Комментарии:
1. Пожалуйста, скажите мне, что мне нужно изменить в этом коде, чтобы добиться успешного выполнения?
2. В вашем проекте есть несколько контроллеров просмотра, один из которых является кодом, который вы опубликовали, потому что, если вы пытаетесь выполнить его из другого, кроме LoginVC, он не найдет segue, который является сообщением об ошибке, которое вы получаете.
3. Делаете ли вы что-то особенное в
prepareForSegue
LoginVC?4. @EduristicIndian Если вы
@
человек, которому вы отвечаете, он получит сообщение в свой почтовый ящик. Быстрый совет!5. @ProviderOfTruth я пытаюсь выполнить переход из самого LoginVC
Ответ №1:
Если вы не делаете ничего особенного в 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
}
Также вы должны установить идентификатор для ваших контроллеров просмотра.
Ответ №2:
Основываясь на комментариях, вот простой способ поместить ссылку на существующий контроллер представления входа в делегат приложения, чтобы вы могли выполнить переход на нем.
Сначала в делегате приложения вам нужно будет добавить свойство для ссылки на контроллер представления входа в систему следующим образом:
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") }
}
Возможно, это не лучший подход, но, не зная больше о проекте, это простой способ заставить его работать.