इसके साथ उपयोग करने के लिए आपको @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
}