从父级重新加载TableViewController

时间:2015-08-22 21:48:02

标签: ios swift tableview parentviewcontroller

我有一个TableViewController,我们称之为 A ,即在另一个视图控制器 B 的容器视图中。当值 B 时,我需要 A 重新加载数据。我还需要它来从 B 获取此更改的值。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑过使用通知

所以,在 B - 我会做类似的事情:

// ViewControllerB.swift

import UIKit

static let BChangedNotification = "ViewControllerBChanged"

class ViewControllerB: UIViewController {

    //... truncated

    func valueChanged(sender: AnyObject) {
        let changedValue = ...
        NSNotificationCenter.defaultCenter().postNotificationName(
            BChangedNotification, object: changedValue)
    }

    //... truncated
}

跟着 A 看起来像这样 - 其中ValueType只是您提到的的类型:

import UIKit

class ViewControllerA: UITableViewController {

    //... truncated

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        //...truncated

        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: "onBChangedNotification:",
            name: BChangedNotification,
            object: nil)
    }

    //... truncated

    func onBChangedNotification(notification: NSNotification) {
        if let newValue = notification.object as? ValueType {

            //...truncated (do something with newValue)

            self.reloadData()
        }
    }
}

最后 - 不要忘记 A deinit方法中的remove the observer

import UIKit

class ViewControllerA: UITableViewController {

    //... truncated 

    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

    //... truncated
}