私は、私のUITableViewCellからViewControllerへのボタンタップでいくつかのアクションを行うためにDelegateの方法を実装しようとしています。以下は、私がこれまで持っているものである -ボタン操作UITableViewCellからViewControllerへ
TableViewCell:
protocol UserCellDelegate : class {
func disableUser(cell: UserCell, button: UIButton)
}
class UserCell : UITableViewCell {
@IBOutlet weak var userLabel: UILabel!
@IBOutlet weak var userDescription: UILabel!
@IBOutlet weak var writeOutUser: UIButton!
weak var delegate: UserCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
writeOutUser.layer.cornerRadius = 5.0
}
@IBAction func disableUserButtonAction(sender: UIButton) {
delegate?.disableUser(self, button: writeOutUser) //self here I believe to be the cell
}
}
のViewController:
class UserDetailTableViewController : UIViewController, UserCellDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let userCell = UserCell()
userCell.delegate = self
}
func disableUser(cell: UserCell, button: UIButton) {
print("VC: User Disabled")
}
}
ここでの問題は、私のViewControllerでdisableUser関数が呼び出されることは決してありません、されています。私は間違って何をしていますか?
どのような方法が最適ですか?
私はSO Approved Answer Hereを参照していましたが、それは私が同じことに従っているものですが、運がありません。 助けていただければ幸いです。ありがとう!!
あなたのデリゲートはvieDidLoadではnilのようです。 cellForRowメソッドでdelagateを設定する必要があります –
デフォルトの初期化子 '()'で 'UITableViewCell'のインスタンスを初期化することはできません。指定された初期化子 'init(style:reuseIdentifier:)'を呼び出さなければなりません。 Swiftでは、デリゲートパターンではなくコールバッククロージャを使用する方が便利です。 – vadian
@TejaNandamuri:それはトリックでした!私はそれがtableViewCellの事実を見落とした: –