如何在触发退出segue之前执行操作?

时间:2015-04-09 23:13:18

标签: ios swift

我已经从视图控制器A创建了一个segue(模态地呈现)来查看通过视图控制器A的导航控制器中的按钮触发的控制器B.接管的模态用于通过键入来发送朋友请求一封电邮。当用户输入电子邮件并按下按钮以提交朋友请求时,我想执行由按钮触发的操作(调用服务器发送朋友请求并在电子邮件存在时返回成功或如果电子邮件不存在则返回错误不存在)。如果成功,我想退出/解除segue回到A.如果错误,我不想退出/解开segue。

我已经调查了this问题,但它似乎没有实现我需要的东西。我正在尝试以下方法:

class BViewController: UIViewController {
    // The button function
    @IBAction func sendFriendRequest(sender: AnyObject) {
        println("Button Function.")
        self.performSegueWithIdentifier("SendFriendRequest", sender: self)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "SendFriendRequest" {
            println("Preparing for segue.")
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

然后在第一个视图控制器中:

AViewController: UIViewController {
    // The unwind function
    @IBAction func saveFriendRequest(segue:UIStoryboardSegue) {
        println("Finished the segue.")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

这是我为按钮设置退出segue时的结果(按住Ctrl键将按钮拖动到ViewController中的'Exit'),我按此顺序接听电话:

Preparing for segue.
Finished the segue.
Button Function.

但是,我不一定每次都要调用prepareForSegue或unwind函数,只有当服务器给出成功消息时。那么我如何连接故事板中的内容,以便在调用performSegueWithIdentifier时,我不必调用其他函数(prepareForSegue等)?

2 个答案:

答案 0 :(得分:0)

如果要在segue,create和if语句之前执行操作以确定操作已成功完成,请执行segue。即

if (ActionSuccess) {
self.performSegueWithIdentifier("Segue", sender: nil)
}

答案 1 :(得分:0)

从按钮中删除退出segue,而只是将按钮链接到新的IBAction并插入

self.dismissViewControllerAnimated(true, completion: nil)

所以,你的新代码将是:

@IBAction func saveFriendRequest(sender: AnyObject) {
   //Do your stuff to save the friend request
   self.dismissViewControllerAnimated(true, completion: nil)
}