당신은 사용할 필요 @objc
에 속성을 didTapCommentButton(_:)
함께 사용하는을 #selector
.
그렇게했다고 말했지만 또 다른 오류가 발생했습니다. 내 생각에 새로운 오류는 Post
Objective-C와 호환되는 유형이 아니라는 것입니다. 모든 인수 형식과 반환 형식이 Objective-C와 호환되는 경우에만 메서드를 Objective-C에 노출 할 수 있습니다.
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
}