2017-09-13 8 views
0

テーブルビューのセルにボタンがあり、ベースコントローラである全体ビューをリロードしたいとします。カスタムUITableViewCellでボタンをクリックしたときのUITableViewの表示

このクラスは、再読み込み(リフレッシュ、ビューコントローラの再呼び出しなど)したいものです。

import UIKit 

class TableVC: BaseController, DBDelegate, PLDelegate { 

@IBOutlet weak var tableViewDB: UITableView! 

} 

そして、私はそれをしなければならない場合、これは次のとおりです。

import UIKit 

class DailySpeakingLesson: UITableViewCell { 

} 
+0

あなたのセルにのみ、そのアクションを持っている場合、あなたは少しの変更でdidSelectRowAtIndexPath UITableViewDelegate方法 –

答えて

1

このためデリゲートを使用してください。

カスタムセルのデリゲートをtableView(_:cellForRowAt:)に設定し、デリゲートの機能内でtableViewDB.reloadData()を呼び出します。

TableVC

class TableVC: BaseController, DBDelegate, PLDelegate, DailySpeakingLessonDelegate { 
    @IBOutlet weak var tableViewDB: UITableView! 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let dailySpeakingLesson = tableView.dequeueReusableCell(withIdentifier: "cellId") as! DailySpeakingLesson 
     dailySpeakingLesson.delegate = self 

     return dailySpeakingLesson 
    } 

    func dailySpeakingLessonButtonPressed() { 
     tableViewDB.reloadData() 
    } 
} 

DailySpeakingLesson

class DailySpeakingLesson: UITableViewCell { 
    weak var delegate: DailySpeakingLessonDelegate? 

    @IBAction func buttonPressed() { 
     delegate?.dailySpeakingLessonButtonPressed() 
    } 
} 

委任

protocol DailySpeakingLessonDelegate: class { 
    func dailySpeakingLessonButtonPressed() 
} 
+0

でそれを行う必要があり、それは非常によく私のために働きました。どうもありがとう。 – Ali

0

のベストプラクティスIデリゲートパターンを使用する。 BaseTableViewControllerで使用しているDemoTableViewCellのボタンがプロトコルBaseTableViewCellDelegateを作成し、BaseTableViewControllerにBaseTableViewCellのデリゲートを割り当てて、ベースビューコントロールが通知されたボタンがセル内で押されるようにします。

protocol DemoTableViewCell Delegate: class { 
    func didTapDemoButton(onCell: DemoTableViewCell) 
} 

class DemoTableViewCell: UITableViewCell { 

    weak var delegate: DemoTableViewCellDelegate? 

    @IBAction func demoButtonAction(_ sender: UIButton) { 
    delegate?.didTapDemoButton(onCell: self) 
    } 
} 

class BaseTableViewController: UITableViewController { 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: DemoTableViewCell), for: indexPath) 
    cell.delegate = self 
    return cell 
    } 

} 

extension BaseTableViewController: DemoTableViewCellDelegate { 
    func didTapDemoButton(onCell: DemoTableViewCell) { 
    //Whenever the button in cell is pressed this delegate method gets called because we have set delegate of DemoTableViewCell as of the base view controller. 
    //now you can do here whatever you want when button is pressed. 

    tableView?.reloadData() 
    } 
} 
関連する問題