2015-03-02 33 views
1

我想知道是否有可能在同一個按鈕分配兩種不同的展開方法。例如:多個展開在同一個按鈕 - 斯威夫特

我有這樣的觀點導航:

  • 首頁 - > A-> B
  • 首頁 - > C->乙

A和C的觀點導航到B,但後來我想使用相同的B視圖和控制器返回到先前的視圖。

有可能嗎?

我一直在考慮寫編程取決於什麼視圖來按鈕分配放開方法。

在此先感謝

對不起我的英語,不好。

回答

0

雖然,問題不是很清楚。但是我能理解的是,你要回到前一個視圖,即B> C或B> A,這取決於用戶來自哪裏。如果是這樣,那麼檢查UINavigationController。它會跟蹤導航歷史並自動添加後退按鈕。有點像我們瀏覽器中的後退按鈕。

這裏是一個教程,雖然有點老:Link

+0

我想與開卷SEGUE做的,因爲更容易和更清潔的編程方式,但我認爲我會在做UINavigationContoller文檔說的方式。 非常感謝。 – vicmator 2015-03-03 08:21:15

1

這裏是爲我工作以及迅速解決。下面的代碼僅適用於在故事板和代碼中正確連接您的賽段。結帳這page偉大的解釋設置放鬆segues。

總結:

  1. 您正在訪問從多個其他視圖同樣的觀點。因此,當您繼續瀏覽視圖時,您可以將源視圖控制器(您當前所在的視圖)傳遞給您要查看的視圖中的某個屬性。

  2. 在您認爲您將放鬆的情況下,您可以檢查持有您來自哪裏的信息(類)的財產,然後根據它的視圖執行繼續。

的代碼:(使用例如:主頁 - > A - > B或...主頁 - 「ç - > B)

注:B是將放鬆到多個不同視圖觀點。

在A或C:(代碼工作在兩個視圖中相同的方式)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "segueIdentifierInViewAthatGoesToViewB" { 
     let controller:B = segue.destinationViewController as! B 
     //the code below passes our current view controller class to a property in view B. 
     //So, view B will know what view we came from. 
     //In our example, we're coming from view A or C 
     controller.viewControllerNavigatedFrom = segue.sourceViewController 
    } 
} 

在B:

//設置一個IBAction爲將檢查源視圖控制器(即我們通過當我們接觸到這個視圖時),並根據我們來自哪裏來執行segue。你可以把它連接到一個按鈕或任何你想要的東西。

// isKindOfClass(A) - 「A」將是你的類名

//setup a property to receive the view controller class where we are coming from 
var viewControllerNavigatedFrom:AnyObject? 

@IBAction func myButtonPressed(sender: AnyObject) { 
    if self.viewControllerNavigatedFrom!.isKindOfClass(A) { 
     //Unwind to view A 
     performSegueWithIdentifier("unwindFromBbackToA", sender: sender) 
    } 
    else if self.viewControllerNavigatedFrom!.isKindOfClass(C) { 
     //Unwind to view C 
     performSegueWithIdentifier("unwindFromBbackToC", sender: sender) 
    } 
}