Bạn cần sử dụng @objcthuộc tính on didTapCommentButton(_:)để sử dụng nó với #selector.
Bạn nói rằng bạn đã làm điều đó nhưng bạn lại gặp một lỗi khác. Tôi đoán là lỗi mới Postkhông phải là loại tương thích với Objective-C. Bạn chỉ có thể hiển thị một phương thức cho Objective-C nếu tất cả các loại đối số và kiểu trả về của nó tương thích với Objective-C.
Bạn có thể khắc phục điều đó bằng cách tạo Postmột lớp con của NSObject, nhưng điều đó sẽ không thành vấn đề, vì dù sao thì đối số didTapCommentButton(_:)sẽ không phải là một Post. Đối số của một hàm hành động là người gửi hành động và người gửi đó sẽ là commentButton, có lẽ là a UIButton. Bạn nên khai báo didTapCommentButtonnhư thế này:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Sau đó, bạn sẽ phải đối mặt với vấn đề nhận được Posttương ứng với nút được nhấn. Có nhiều cách để có được nó. Đây là một.
Tôi thu thập được (vì mã của bạn cho biết cell.commentButton) rằng bạn đang thiết lập chế độ xem bảng (hoặc chế độ xem bộ sưu tập). Và vì ô của bạn có thuộc tính không chuẩn có têncommentButton , tôi cho rằng đó là một UITableViewCelllớp con tùy chỉnh . Vì vậy, hãy giả sử ô của bạn được PostCellkhai báo như thế này:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Sau đó, bạn có thể đi lên hệ thống phân cấp chế độ xem từ nút để tìm PostCellvà lấy bài đăng từ đó:
@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
}