Swift / 如何使用 popViewController 调用委托

Dav*_*eek 2 ios swift

我已经从下到上阅读了这个线程(以及类似的其他线程),但它根本不符合我的需求。

我在一个UIViewController里面UIPageViewController有一个UINavigationController. 导航到第二个 ViewController。导航到第 3 个 ViewController 并希望返回到第 2 个传递数据的 ViewController。

我目前的代码:

protocol PassClubDelegate {
            func passClub(passedClub: Club)
        }

class My3rdVC: UIViewController {

        var clubs: [Club] = []

        var passClubDelegate: PassClubDelegate?

....

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let club = clubs[indexPath.row]
        self.passClubDelegate?.passClub(club)
        navigationController?.popViewControllerAnimated(true)
    }
Run Code Online (Sandbox Code Playgroud)

我的第二个 VC:

class My2ndVC: UIViewController, PassClubDelegate {

    var club = Club()

    func passClub(passedClub: Club) {

        SpeedLog.print("passClub called \(passedClub)")
        club = passedClub
    }
Run Code Online (Sandbox Code Playgroud)

passClub不叫。我确定这是因为我没有将委托设置为 My2ndVC,但是我该怎么做呢?我发现的所有解决方案都希望我使用 a) segue 或 b) 实例化一个 My2ndVC new,什么没有任何意义,因为它仍在内存中,我想弹回层次结构。我错过了什么?我有哪些可能性?非常感谢帮助。

PS:我没有使用任何segues。My3rdVC 被调用:

let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC
self.navigationController?.pushViewController(vc, animated: true)
Run Code Online (Sandbox Code Playgroud)

Cal*_*lam 5

您可以My3rdVC在 的prepareForSegue方法中 设置 的委托My2ndVC

class My2ndVC: UIViewController, PassClubDelegate {

    ...

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        super.prepareForSegue(segue, sender: sender)

        switch segue.destinationController {
        case let controller as My3rdVC:
            controller.passClubDelegate = self
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是假设你已经在你的故事板中创建了一个My3rdVCMy2ndVC导航控制器堆栈推送到导航控制器堆栈的 segue, 我假设你有。因此,只需尝试简单地将此prepareForSegue方法粘贴到其中My2ndVC,看看它是否有效。

更新

let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC

vc.passClubDelegate = self

navigationController?.pushViewController(vc, animated: true)
Run Code Online (Sandbox Code Playgroud)