2017-07-20 12 views
1

Guys View Controllerでデリゲートメソッドを呼び出す際に問題があります。私はいくつかのチュートリアルを続けましたが、私はそれを働かせることができません。私が間違っていることを指摘できますか?おかげデリゲートメソッドが呼び出されていません

ビュー:

protocol TableViewCellDelegate: class { 
    func showNutrients(cell: TableViewCell) 
} 

class TableViewCell: UITableViewCell { 

    @IBOutlet weak var nutrientsButton: UIButton! 
    @IBOutlet weak var editButton: UIButton! 
    @IBOutlet weak var removeButton: UIButton! 
    @IBOutlet weak var mealLabel: UILabel! 

    weak var delegate: TableViewCellDelegate? 

    @IBAction func showNutrients(_ sender: Any) { 
     delegate?.showNutrients(cell: self) 
    } 

} 

ビューコントローラ:

class NutritionViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, TableViewCellDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    var cell = TableViewCell() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     tableView.dataSource = self 
     cell.delegate = self 
    } 

    ... 

    func showNutrients(cell: TableViewCell) { 
     let indexPath = self.tableView.indexPath(for: cell) 
     self.meals[indexPath!.row].nutrientsShown.negate() 
     self.tableView.reloadRows(at: [indexPath!], with: .none) 
    } 
} 
+0

'var cell = TableViewCell()'のようなセルは作成しないでください。 'cellForRowAt'でセルをデキューし、デリゲートを' cell.delegate = self 'に設定します。 – paulvs

+0

アドバイスをいただきありがとうございます。私はそれをしましたが、方法は依然として呼び出されていません。 –

+1

これはうまくいきました。私はデリゲートを最初に設定し、その後にセルをデキューしました。私がしなければならなかったことは、それらの2行を逆転させることでした。愚かな間違い。あなたのコメントありがとう:) –

答えて

0

あなたはvar cell = TableViewCell()のようなセルを作成すべきではない、何をやるべきことはcellForRowAtでセルデキューされ、その後、デリゲートを設定しますすなわち、cell.delegate = self

関連する問題