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)
}
}
'var cell = TableViewCell()'のようなセルは作成しないでください。 'cellForRowAt'でセルをデキューし、デリゲートを' cell.delegate = self 'に設定します。 – paulvs
アドバイスをいただきありがとうございます。私はそれをしましたが、方法は依然として呼び出されていません。 –
これはうまくいきました。私はデリゲートを最初に設定し、その後にセルをデキューしました。私がしなければならなかったことは、それらの2行を逆転させることでした。愚かな間違い。あなたのコメントありがとう:) –