@objc
İle kullanmak için üzerinde didTapCommentButton(_:)
niteliği kullanmanız gerekir #selector
.
Bunu yaptığını söylüyorsun ama başka bir hata aldın. Tahminimce yeni hata Post
Objective-C ile uyumlu bir tip değil. Bir yöntemi yalnızca tüm bağımsız değişken türleri ve dönüş türü Objective-C ile uyumluysa Objective-C'ye maruz bırakabilirsiniz.
Post
Bir alt sınıf oluşturarak bunu düzeltebilirsiniz NSObject
, ama bu önemli olmayacak, çünkü argümanı zaten didTapCommentButton(_:)
olmayacak Post
. Bir eylem işlevinin argümanı eylemin göndericisidir ve bu gönderen commentButton
muhtemelen a'dır UIButton
. Şöyle beyan etmelisiniz didTapCommentButton
:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Daha sonra Post
, dokunulan düğmeye karşılık gelen sorunla karşılaşacaksınız . Bunu elde etmenin birden çok yolu var. Işte bir tane.
Anladığım kadarıyla (kodunuz söylediği için cell.commentButton
) bir tablo görünümü (veya koleksiyon görünümü) oluşturuyorsunuz. Ve hücrenizin adlı standart olmayan bir özelliği commentButton
olduğundan, bunun özel bir UITableViewCell
alt sınıf olduğunu varsayıyorum . Öyleyse hücrenizin böyle bir PostCell
ilan olduğunu varsayalım :
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Ardından, düğmeden görünüm hiyerarşisinde yukarı doğru yürüyebilir ve gönderiyi buradan PostCell
alabilirsiniz:
@objc func didTapCommentButton(sender: UIButton) {
var ancestor = sender.superview
while ancestor != nil && !(ancestor! is PostCell) {
ancestor = view.superview
}
guard let cell = ancestor as? PostCell,
post = cell.post
else { return }
// Do something with post here
}