Bạn cần sử dụng @objc
thuộ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 Post
khô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 Post
mộ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 didTapCommentButton
như thế này:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Sau đó, bạn sẽ phải đối mặt với vấn đề nhận được Post
tươ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 UITableViewCell
lớp con tùy chỉnh . Vì vậy, hãy giả sử ô của bạn được PostCell
khai 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 PostCell
và 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
}