Ios 如何从另一个controlview swift 3重新加载tableview?

Ios 如何从另一个controlview swift 3重新加载tableview?,ios,swift,uitableview,swift3,favorites,Ios,Swift,Uitableview,Swift3,Favorites,在我的iOS应用程序中,我有DetailController和FavoriteViewController用于最喜欢的单词在将单词添加到最喜欢的单词后如何自动重新加载表视图 在DetailController中向我的数据库发送数据很有趣 @IBAction func favs(_ sender: UIButton) { if listMean[sender.tag].Favorite == 1 { listMean[sender.tag].Favorite

在我的iOS应用程序中,我有DetailController和FavoriteViewController用于最喜欢的单词在将单词添加到最喜欢的单词后如何自动重新加载表视图

在DetailController中向我的数据库发送数据很有趣

@IBAction func favs(_ sender: UIButton) {
        if listMean[sender.tag].Favorite == 1 {
            listMean[sender.tag].Favorite  = 0
        }
        else {
            listMean[sender.tag].Favorite = 1
        }

        Singleton.ShareInstance.dbHelper.updateFavorite(newMean: listMean[sender.tag])
    }
import UIKit

class FavoriteViewController: UITableViewController {


        var listFavorite = [FavoriteModel]()
        var dbHelper = DatabaseHelper()

        override func viewDidLoad() {
            super.viewDidLoad()
            loadAllWords()
                   }



    func relodaTableview() {
        self.tableView.reloadData()

    }
        func loadAllWords(){
            listFavorite = dbHelper.getAllFavorite()
            tableView.dataSource = self
            tableView.delegate = self
                   }


        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            navigationItem.title = nil
            if segue.identifier == (Singleton.ShareInstance.enwordSelected?.Word){
                navigationItem.title = (Singleton.ShareInstance.enwordSelected?.Word)
            }

        }


        override func numberOfSections(in tableView: UITableView) -> Int {

            return 1

        }

        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return listFavorite.count

        }

        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! FavoriteViewCell

                cell.favoriteword = listFavorite[indexPath.row]

                return cell

        }


        override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 45
        }


        override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            Singleton.ShareInstance.favoriteSelected = listFavorite[indexPath.row]


            let des = storyboard?.instantiateViewController(withIdentifier: "DetailController")
            navigationController?.pushViewController(des!, animated: true)

        }


}
这是我最喜欢的控制器

@IBAction func favs(_ sender: UIButton) {
        if listMean[sender.tag].Favorite == 1 {
            listMean[sender.tag].Favorite  = 0
        }
        else {
            listMean[sender.tag].Favorite = 1
        }

        Singleton.ShareInstance.dbHelper.updateFavorite(newMean: listMean[sender.tag])
    }
import UIKit

class FavoriteViewController: UITableViewController {


        var listFavorite = [FavoriteModel]()
        var dbHelper = DatabaseHelper()

        override func viewDidLoad() {
            super.viewDidLoad()
            loadAllWords()
                   }



    func relodaTableview() {
        self.tableView.reloadData()

    }
        func loadAllWords(){
            listFavorite = dbHelper.getAllFavorite()
            tableView.dataSource = self
            tableView.delegate = self
                   }


        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            navigationItem.title = nil
            if segue.identifier == (Singleton.ShareInstance.enwordSelected?.Word){
                navigationItem.title = (Singleton.ShareInstance.enwordSelected?.Word)
            }

        }


        override func numberOfSections(in tableView: UITableView) -> Int {

            return 1

        }

        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return listFavorite.count

        }

        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! FavoriteViewCell

                cell.favoriteword = listFavorite[indexPath.row]

                return cell

        }


        override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 45
        }


        override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            Singleton.ShareInstance.favoriteSelected = listFavorite[indexPath.row]


            let des = storyboard?.instantiateViewController(withIdentifier: "DetailController")
            navigationController?.pushViewController(des!, animated: true)

        }


}

您可以使用委托模式或回调方法。 委托模式: 您应该创建一个协议

protocol FavoriteDetailDelegate {
func updateTableView() }
视图控制器符合代理的协议

extension FavoriteViewController: FavoriteDetailDelegate {
func updateTableView() {
    print("Something update etc ...")
} }
并且您的详细信息页面是您的表视图:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detailSegue" {
        let detailVC = segue.destination as! FavoriteDetailViewController
        detailVC.delegate = self
    }
}
您可以更新详细视图控制器

@IBAction func update(_ sender: UIButton) {
    delegate.updateTableView()
}
var callback: ((String) -> Void)!
@IBAction func update(_ sender: UIButton) {
    callback("test")
}
也可以使用回调方法: 在详细视图控制器中创建回调

@IBAction func update(_ sender: UIButton) {
    delegate.updateTableView()
}
var callback: ((String) -> Void)!
@IBAction func update(_ sender: UIButton) {
    callback("test")
}
视图控制器

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detailSegue" {
        let detailVC = segue.destination as! FavoriteDetailViewController
        detailVC.callback = {
            str in
            print("String \(str)")
        }
    }
}

添加重新加载表的观察者

NotificationCenter.default().addObserver(self, selector: Selector(("relodaTableview")), name: "loadedPost", object: nil)
从另一个视图控制器中,您需要重新加载FavoriteViewController的表,以便重新加载

NotificationCenter.default().post(NSNotification(name: "loadedPost" as NSNotification.Name, object: nil) as Notification)

使用Swift 3中的委托方法这将不起作用@Jignesh Mayani先生:)当然@Bhavik shah先生