2015-02-09 16 views
0

在我的iPhone項目中,我有一個退出PlayView的退出遊戲。 內部展開功能如下所示我有一個計時器延遲0.05秒,然後執行「autoSegue」功能,然後進入其他屏幕。這適用於iOS 8,但對於iOS7設備,我不得不大幅增加此延遲(最多1.0秒),否則,它會導致「另一個segue已在進行中」錯誤。Swift:如何實現一個自定義AutoSegue

有沒有辦法在任何先前的賽段完成時自動執行「autoSegue」功能?

@IBAction func unwindToPlay (sender: UIStoryboardSegue){ 
    var del = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "autoSegue", userInfo: nil, repeats: false) 
} 

回答

1

viewDiDAppear而不是從你的開卷賽格瑞打電話給你autoSegue。這將只在所有動畫轉換完成後才被調用。你不需要計時器。但是你可能想在你的展開順序上設置某種標誌,以在發生展開順序後觸發只有

編輯
由於這似乎並不爲你工作,這裏是一些代碼...

class RedViewController: UIViewController { 
    var segueDidUnwind: Bool = false 

    @IBAction func unwindToRed(sender: UIStoryboardSegue) { 
     println("unwindToRed"); 
     segueDidUnwind = true 
    } 

    override func viewDidAppear(animated: Bool) { 
     println("viewDidAppear"); 
     if (segueDidUnwind) { 
      self.showVC() 
      segueDidUnwind = false 
     } 
    } 

    func showVC() { 
     let vc = UIViewController() 
     self.presentViewController(vc, animated: true, completion: nil) 
    } 
} 

它的this answer的延伸......這是我們可以擴展日誌記錄...

actionForUnwindButton 
prepareForSegue 
unwindToRed 
viewDidAppear 

如果viewDidAppear是沒有得到所謂的在你的代碼,你必須有其他的結構,你的項目,這是不是在這個問題明顯。

+0

viewDidAppear不會在unwind segue上調用。 – Kashif 2015-02-09 20:54:49

+0

@Tpos,我一定誤解了你項目的結構。我假設unwind segue把你帶到「PlayView」(UIViewController),它應該觸發'viewWillAppear',然後觸發'viewDidAppear'。 – foundry 2015-02-09 21:01:54

+0

您的理解是正確的,但由於我在初次啓動後未刪除PlayView,因此只會在初次啓動時調用viewWillAppear/viewDidAppear一次。後續從PlayView的其他視圖展開後退不會在PlayView中調用viewWillAppear/viewDidAppear。除非我做錯了這是造成這種情況? – Kashif 2015-02-09 21:08:00