এটি ব্যবহার করতে আপনাকে @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
}