इसके साथ उपयोग करने के लिए आपको @objcविशेषता का उपयोग करने की आवश्यकता है ।didTapCommentButton(_:)#selector
आप कहते हैं कि आपने ऐसा किया लेकिन आपको एक और त्रुटि मिली। मेरा अनुमान है कि नई त्रुटि यह है कि Postकोई ऐसा प्रकार नहीं है जो ऑब्जेक्टिव-सी के साथ संगत हो। आप केवल ऑब्जेक्टिव-सी के लिए एक विधि का खुलासा कर सकते हैं यदि इसके सभी प्रकार के तर्क, और इसके रिटर्न प्रकार, ऑब्जेक्टिव-सी के साथ संगत हैं।
आप उस का Postउपवर्ग बनाकर उसे ठीक कर सकते हैं NSObject, लेकिन इससे कोई फर्क नहीं पड़ता, क्योंकि तर्क तो वैसे भी didTapCommentButton(_:)नहीं होगा Post। एक्शन फंक्शन का तर्क एक्शन भेजने वाला है, और वह भेजने वाला होगा commentButton, जो कि संभवतः एक है UIButton। आपको didTapCommentButtonइस तरह की घोषणा करनी चाहिए :
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
फिर आपको Postटैप किए गए बटन के अनुरूप होने की समस्या का सामना करना पड़ेगा । इसे प्राप्त करने के कई तरीके हैं। यहां एक है।
मैं इकट्ठा करता हूं (जब से आपका कोड कहता है cell.commentButton) कि आप टेबल व्यू (या संग्रह दृश्य) सेट कर रहे हैं। और चूंकि आपके सेल में एक गैर-मानक संपत्ति है commentButton, जिसका नाम है , मुझे लगता है कि यह एक कस्टम UITableViewCellउपवर्ग है। तो चलिए मान लेते हैं कि आपका सेल PostCellइस तरह घोषित है:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
तब आप बटन को देखने के लिए पदानुक्रम को देख सकते हैं PostCell, और इससे पद प्राप्त कर सकते हैं:
@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
}