2016-11-02 24 views
0

他のビューコントローラを、アプリケーションの最初の実行であるかどうかを確認してから開きたいとします。私はボタンを押したときに私は理解して何から[OK]を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

を支援同じコードperformSegue(withIdentifier: "openMap", sender: nil)の代わりにviewDidAppear

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

それが動作しない場合、あなたはおそらくあなたのセグエの作成にミスを犯してきたし、ストーリーボードに直接送信先のViewControllerにButtonを接続する代わりに、二つのコントローラに接続している:もしそうならsegue between controllers

は、単に削除古いセグエ、それは上の画像の上にあり、同じセグエID「openMap」EDITED

を割り当てるような方法でそれを再クリート: は、代わりのviewDidLoadのviewDidAppearにごセグエの実行に移動してくださいのviewDidLoad理由ViewControllerオブジェクトが作成され、まだウィンドウにアタッチされていないときに呼び出されます。

+0

私は前にviewDidのロードメソッドでコードをコピーしようとしましたが、うまくいきませんでした。そして、私はボタンではなく両方のコントローラーを接続します。 –

+0

viewDidAppearで移動してください。私は私の答えを編集しました。 – livenplay

0

は、あなたがセグエ「openMap」それHasLaunchedOnceを実行したいということですopenMap私はメソッドを呼び出していないとき それは動作します。あなたが間違っていることは、あなたが@IBAction関数を呼び出すことです。あなたはまだそのボタン

  1. あなたが好きな場合は機能と名前を作成を持っているしたい場合、これは私の提案

    です。この関数の内部では、このsegueを実行します。この関数を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) 
} 

希望これがそうならば、あなたが@IBAction func openMap() にあなたのボタンを接続している、あなたはviewDidLoadopenMap()アクションを呼び出しますが、使用しないでください、私が想定し

関連する問題