島之風豪格打我相同的解決方案方法,但我已經有一個更詳細的回答開始,我將添加它。
比方說,你的兩個視圖控制器命名如下:
- 主/入口點:
ViewController
(vcA)
- 次視點:
ViewControllerB
(vcB)
您建立SEGUE從(vcA) -> (vcB)
開始,就像你在例子中做的那樣
/* in ViewController.swift */
// ...
// segue ViewController -> ViewControllerB
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
{
if segue.identifier == "viewNext" {
let viewControllerB = segue.destinationViewController as! ViewControllerB
viewControllerB.dataPassed = labelOne.text
}
}
的有些麻煩步驟接下來的是,使用該方法,用於傳遞數據返回從(vcB)
到(vcA)
的SEGUE是也加入到(vcA)
源,作爲@IBAction
方法(而比可能預期的要多,添加到(vcB)
的來源)。
/* in ViewController.swift */
// ...
// segue ViewControllerB -> ViewController
@IBAction func unwindToThisView(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? ViewControllerB {
dataRecieved = sourceViewController.dataPassed
}
}
您其後(vcB)
在(vcA)
能通過手動Exit
SEGUE在(vcB)
連接比方說,一個按鈕來此開卷動作:
下面跟隨從(vcA)
傳遞文本的一個完整的例子(vcB)
; (可能)通過UITextField
修改該文本,最後將可能修改的文本返回到(vcA)
。
(vcA)
來源:
/* ViewController.swift: Initial view controller */
import UIKit
class ViewController: UIViewController {
var dataRecieved: String? {
willSet {
labelOne.text = newValue
}
}
@IBOutlet weak var labelOne: UILabel!
@IBAction func buttonOne(sender: UIButton) {
performSegueWithIdentifier("viewNext", sender: self)
}
// set default labelOne text
override func viewDidLoad() {
super.viewDidLoad()
labelOne.text = "Default passed data"
}
// segue ViewController -> ViewControllerB
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
{
if segue.identifier == "viewNext" {
let viewControllerB = segue.destinationViewController as! ViewControllerB
viewControllerB.dataPassed = labelOne.text
}
}
// segue ViewControllerB -> ViewController
@IBAction func unwindToThisView(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? ViewControllerB {
dataRecieved = sourceViewController.dataPassed
}
}
}
(vcB)
源(注意,這裏的UITextFieldDelegate
代表僅用於「本地」變異的dataPassed
屬性的值,這將返回到(vcA)
並分配給dataRecieved
後者的屬性)
/* ViewControllerB.swift */
import UIKit
class ViewControllerB: UIViewController, UITextFieldDelegate {
var dataPassed : String?
@IBOutlet weak var textField: UITextField!
// set default textField text to the data passed from previous view.
override func viewDidLoad() {
super.viewDidLoad()
textField.text = dataPassed
// Handle the user input in the text field through delegate callbacks
textField.delegate = self
}
// UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
// User finished typing (hit return): hide the keyboard.
textField.resignFirstResponder()
return true
}
func textFieldDidEndEditing(textField: UITextField) {
dataPassed = textField.text
}
}
執行示例:
只需在展開視圖控制器中實現'prepareForSegue'並訪問'destinationViewController',它將成爲您展開的視圖控制器。您可能會想要在故事板中提供展開順序和標識符 – Paulw11
它提供了一個錯誤「沒有標識符」btnSubmitSegue「'」。我在視圖控制器中添加了segue標識符。我只用一個segue來連接兩個視圖控制器。我相信放鬆segue只是回到它以前的視圖控制器沒有任何額外的賽段?你能詳細解釋一下嗎?一些代碼,將不勝感激:) – ebby94
創建開卷SEGUE按往常一樣 - 拖動到場景中的'exit'圖標。現在,在左側的對象檢查器中,您將看到視圖控制器,第一響應者和退出圖標下方列出的展開順序。您可以點擊展開順序並在右側的檢查器中給它一個標識符。 – Paulw11