2016-12-31 71 views
0

我想實現如下:(我使用導航控制器) enter image description here的iOS導航便捷悠閒地重定向

查看A具有確定該走的路幾個選項。第一個顯示視圖B,然後使用導航控制器顯示視圖C.工具欄的第一個項目執行展開到視圖A.哪些工作。在工具欄上的第二個項目,我想不放鬆只有A,但重定向到查看E.

在視圖控制器的代碼如下所示:

@IBAction func unwindToHomeController(segue: UIStoryboardSegue) { 
    self.performSegue(withIdentifier: "toPerson", sender: self) 
} 

當我點擊第二在工具欄中顯示視圖E,但視圖A在短暫延遲後立即顯示。

如何停止View A的顯示?

也許有更好的辦法。

+0

首先觀察你是否有6個導航控制器。你應該只需要一個。你認爲每個視圖控制器需要嵌入到自己的導航控制器中嗎?不可能在沒有看到更多代碼的情況下診斷目前出現的問題,但目前直到擺脫那些導航控制器才毫無意義。清理出來,然後解決剩下的問題。其次,它是否需要成爲一個工具欄而不是標籤欄?因爲使用標籤欄控制器將提供自動切換視圖控制器的功能功能。 – Gruntcakes

+0

我刪除了額外的導航控制器...我的壞我不明白你只需要一個。不知道要顯示的代碼。我從其他視圖中引用A中的unwind segue,並顯示展開代碼。由於在顯示A之前短暫顯示View E,因此代碼將運行。我也可以通過它。 – lascoff

回答

1

你需要等待動畫完成performSegue到E:

class ViewController: UIViewController { 

    @IBAction func unwindToA(segue: UIStoryboardSegue) { 
    } 

    @IBAction func unwindToE(segue: UIStoryboardSegue) { 
     CATransaction.begin() 
     CATransaction.setCompletionBlock { 
      self.performSegue(withIdentifier: "E", sender: nil) 
     } 
     CATransaction.commit() 
    } 

} 

Normal unwind

修訂爲了避免閃爍呈現,同時推動é

1)拆下unwindToE功能:

extension ViewController { 

    @IBAction func unwindToA(segue: UIStoryboardSegue) { 
    } 

// @IBAction func unwindToE(segue: UIStoryboardSegue) { 
//  CATransaction.begin() 
//  CATransaction.setCompletionBlock { 
//   self.performSegue(withIdentifier: "E", sender: nil) 
//  } 
//  CATransaction.commit() 
// } 

} 

2)創建自定義賽格瑞:

class MyUnwindSegue: UIStoryboardSegue { 

    override func perform() { 

     guard let nav = source.navigationController else { return } 
     guard let root = nav.viewControllers.first else { return } 
     let viewControllers = [root, destination] 
     nav.setViewControllers(viewControllers, animated: true) 

    } 

} 

3)更新順着接下去MyUnwindSegue在故事板(確保模塊選擇爲您的項目模塊,而不是):

Using custom unwind segue

+0

我對這個解決方案抱有很高的期望,但它對我沒有任何作用。我仍然看到E簡要,然後A顯示:( – lascoff

+0

哎呀我的壞,它的工作。關於如何我可以保持A閃爍的任何建議? – lascoff

+0

你是什麼意思**閃爍**? – bubuxu