2017-05-04 8 views
0

私のiOSアプリケーションでは、好きな単語のためにDetailControllerとFavoriteViewControllerを追加しました。別のcontrolview swiftからテーブルビューをリロードする方法3?

それは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]) 
    } 

で私のDBにデータを送信するのも楽しいです、それは私の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

あなたはデリゲートパターンやコールバックメソッドを使用することができます。 デリゲートパターン: あなたのビューコントローラは、デリゲート

extension FavoriteViewController: FavoriteDetailDelegate { 
func updateTableView() { 
    print("Something update etc ...") 
} } 

のためにあなたのプロトコルに準拠し

protocol FavoriteDetailDelegate { 
func updateTableView() } 

プロトコルを作成する必要がありますし、あなたの詳細ページには、委任、あなたのテーブルビューである:

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() 
} 

か、コールバックメソッドを使用することができます。

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

からリロードテーブルのためのオブザーバーを追加

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

ビューコントローラで詳細ビューコントローラに

var callback: ((String) -> Void)! 
@IBAction func update(_ sender: UIButton) { 
    callback("test") 
} 

をコールバックを作成します。 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 –

関連する問題