0

私は TableViewController を持っています。それをAと呼びましょう。これは、別のビュー コントローラーBのコンテナー ビューにあります。Bで値が変更されたときにデータをリロードするには、 Aが必要です。この変更された値をBから取得するためにも必要です。何か案は?

4

1 に答える 1

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

import UIKit

class ViewControllerA: UITableViewController {

    //... truncated 

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

    //... truncated
}
于 2015-08-22T23:17:06.147 に答える