2017-05-04 3 views
0

내 IOS 응용 프로그램에서 내가 좋아하는 단어를 추가 한 후 테이블보기를 자동으로 다시로드하는 방법을 좋아하는 단어에 대한 DetailController 및 FavoriteViewController가 있습니까?다른 controlview 스위프트에서 tableview를 다시로드하는 방법 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() 
} 

하거나 콜백 방법을 사용할 수 있습니다 : 뷰 컨트롤러에서

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

스위프트 3에서는 @Mr이 작동하지 않습니다. Jignesh Mayani :) – iBhavik

+0

확실한 @ 미스터 Bhavik 샤 –

관련 문제