我使用'A-VIEW'中的“performSegueWithIdentifier()”跳转到'B-VIEW'
现在,我要返回A,B将参数传输到A
B:
protocol changeDelegate : NSObjectProtocol{
func returnCard(controller:UIViewController,labelText:NSString)
}
var delegate:changeDelegate?
@IBAction func rrrr(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion:{
println("start")
self.delegate?.returnCard("1234")
})
}
A:
class AViewController: UIViewController,changeDelegate{
....
func returnCard(labelText: NSString) {
println(labelText)
}
}
不输出
答案 0 :(得分:3)
您可以使用提供的退出(即展开您的segue)。
在第一个视图控制器中,您需要添加一个IBAction函数,并将UIStoryboardSegue作为参数。在这里,我们称之为@IBAction func unwindFromSecondVC(segue: UIStoryboardSegue)
。在其中您将能够访问您正在返回的视图控制器。
在第二个视图控制器中,您可以执行必须执行的操作。 在视图本身(故事板)中,您只需放置一个按钮,以便在需要时返回。将此按钮链接到视图控制器的“退出”(顶部的橙色方块,请参见底部的捕获)。 如果您不需要按钮,也可以通过编程方式完成。
ViewController.swift:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Here, you pass your parameter(s) to the secondVC.
}
@IBAction func unwindFromSecondVC(segue: UIStoryboardSegue) {
// Here you can receive the parameter(s) from secondVC
let secondVC : SecondViewController = segue.sourceViewController as SecondViewController
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
<强> SecondViewController.swift 强>
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// You can do stuff here (but to go forward not backward in segue).
// But in your case, see firstVC.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
故事板: 来自其他问答的示例:http://goo.gl/J35mC6
答案 1 :(得分:1)
这就是我用过的:
protocol ValueReturner {
var returnValueToCaller: ((Any) -> ())? { get set }
}
在A:
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
if let secondViewController = segue.destinationController as? ValueReturner {
secondViewController.returnValueToCaller = someFunctionThatWillHandleYourReturnValue
}
}
func someFunctionThatWillHandleYourReturnValue(returnedValue: Any) {
// cast returnedValue to the returned value type and do what you want. For example:
if let string = returnedValue as? String {
println(string)
}
}
在B:
class SecondViewController: NSViewController, ValueReturner {
var returnValueToCaller: ((Any) -> ())?
@IBAction func rrrr(sender: AnyObject) {
returnValueToCaller?("1234")
dismissViewController(self)
}
}
这样,SecondViewController不必知道有关FirstViewController的任何信息,它可以传回任何值。我没有尝试过使用dismissViewControllerAnimated,所以我不知道这是否有效。
答案 2 :(得分:0)
这个谜语的关键是如此明显。
当你连接第二个屏幕上的按钮(你要返回的那个按钮)时,按住Ctrl键将它拖到Exit,它会为你提供一堆IBAction例程。您需要在第一个屏幕(您要返回TO的屏幕)中选择您已准备好的那个。
然后它就像奶油一样光滑。