的選擇您需要使用@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
}
FeedViewController的類聲明行是什麼樣的? didTapCommentButton是如何聲明的?當您添加@objc時會得到什麼錯誤? – vacawama
更新,我編輯了我的帖子。我遠離現在的電腦,所以我忘記了確切的錯誤信息,但它是XCode告訴我添加它然後在其自己的決定上拋出錯誤的情況之一。 – Echizzle
您的類是否聲明瞭「@ objc」,還是它是「NSObject」的子類? – NRitH