使用segue打开其他视图只能通过按下按钮

时间:2016-11-02 13:50:34

标签: swift segue

我想在检查它是否是应用程序的第一次运行后打开另一个视图控制器。 当我按下按钮时它可以工作,但是当我调用方法openMap

时却没有
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)

}


}

2 个答案:

答案 0 :(得分:0)

好的,据我所知,你想在HasLaunchedOnce时执行一个segue“openMap”。那么你做错了就是你正在调用一个@IBAction函数。这是我的建议

如果你还想要那个按钮

  1. 创建一个函数和名称,如果你想要的话。在这个函数里面执行这个segue。将此函数链接到if else语句和按钮。
  2. 例如:

    if let lat = latitude, let doubleLat = Double(lat) {
      print(doubleLat)  // doubleLat is of type Double now
    }
    

    希望这会有所帮助

答案 1 :(得分: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时犯了一个错误,并将Button直接连接到故事板中的目标ViewController,而不是连接两个控制器:segue between controllers < / p>

如果是这样,只需删除旧的segue,然后按照上图中的方式重新创建它并分配相同的segue id&#34; openMap&#34;

EDITED: 请将您的segue执行到viewDidAppear而不是viewDidLoad,因为在创建ViewController对象并且它尚未附加到窗口时调用viewDidLoad。