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