2016-11-02 1 views
0

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

class TutorialController: UIViewController { 

override func viewDidLoad() { 
    //check if the app opens for the first time 
    if(UserDefaults.standard.bool(forKey: "HasLaunchedOnce")) 
    { 
     // app already launched 
     print("not first launch") 
     openMap() 
    } 
    else 
    { 
     // This is the first launch ever 
     UserDefaults.standard.set(true, forKey: "HasLaunchedOnce") 
     UserDefaults.standard.synchronize() 
     print("first launch") 
     openTutorial() 
    } 
} 
func openTutorial(){ 

} 
@IBAction func openMap(){ 
    print("openmap opened") 
    performSegue(withIdentifier: "openMap", sender: nil) 

} 


} 

ответ

0

Я полагаю, вы подключили кнопку @IBAction func openMap() , если да, то вы не должны вызывать openMap() действие внутри viewDidLoad, но использовать тот же код performSegue(withIdentifier: "openMap", sender: nil) вместо этого в вашем viewDidAppear:

if(UserDefaults.standard.bool(forKey: "HasLaunchedOnce")) 
    { 
     // app already launched 
     print("not first launch") 
     performSegue(withIdentifier: "openMap", sender: nil) 
    } 
... 

Если он не работает, вы, вероятно, сделал ошибку с созданием вашего Segue и подсоединили кнопку для назначения ViewController непосредственно в раскадровке вместо подключения двух контроллеров: segue between controllers

Если это так, просто удалите старый переход, и вновь крит его в пути, как на изображении выше, и назначить тот же переход ИД «OpenMap»

Редакцией: Пожалуйста, переместить выполнение своего Segue к viewDidAppear вместо viewDidLoad, потому что viewDidLoad вызывается, когда объект ViewController создан и еще не прикреплен к окну.

+0

Я пытался скопировать код в методе loadDid перед просмотром, он не сработал. И я подключаю оба контроллера не к кнопке. –

+0

Пожалуйста, попробуйте переместить его в viewDidAppear. Я отредактировал свой ответ. – livenplay

0

Ok, от того, что я понимаю, что вы хотите, чтобы выполнить переход «OpenMap», когда он HasLaunchedOnce. Что вы делаете неправильно, так это то, что вы вызываете функцию @IBAction. Это мое предложение

, если вы все еще хотите иметь эту кнопку

  1. создать функцию и имя, если все, что вы хотите. Внутри этой функции выполните этот шаг. Свяжите эту функцию с инструкцией if else и кнопкой.

например:

//if else statement 
if(UserDefaults.standard.bool(forKey: "HasLaunchedOnce")) 
{ 
     // app already launched 
     print("not first launch") 
     anotherFunction() 
} 

//@ibaction (scrap this if you don't want the button) 
@IBAction func openMap() 
{ 
    print("openmap opened") 
    anotherFunction() 

} 

//another function 
func anotherFunction() 
{ 
    performSegue(withIdentifier: "openMap", sender: nil) 
} 

надеюсь, что это помогает