2017-05-04 69 views
0

在我的iOS应用程序中,我最喜欢的词有DetailController和FavoriteViewController如何自动重新加载表格视图后添加到收藏夹的单词?如何从另一个控件视图swift 3重新加载tableview?

这是有趣的数据发送到我的分贝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]) 
    } 

这是我FavoriteViewController

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) 

     } 


} 
+0

使用委托方法 –

回答

0

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

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") 
} 
在视图控制器

回调

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)") 
     } 
    } 
} 
0

添加观察员重装表

NotificationCenter.default().addObserver(self, selector: Selector(("relodaTableview")), name: "loadedPost", object: nil) 

而且从另一个视图控制器,你想重新加载FavoriteViewContr表oller发布通知以重新加载

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

在Swift 3中,这将不起作用@Mr。 Jignesh Mayani :) – iBhavik

+0

sure @ Mr Bhavik shah –

相关问题