2017-05-04 51 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 –

相關問題