亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SWIFT:當單元格中的按鈕被點擊時,如何獲得indexpath.row?

SWIFT:當單元格中的按鈕被點擊時,如何獲得indexpath.row?

溫溫醬 2019-06-17 17:21:45
我有一個帶有按鈕的表視圖,當其中一個按鈕被點擊時,我想使用indexpath.row。這是我目前所擁有的,但始終是0。var point = Int()func buttonPressed(sender: AnyObject) {     let pointInTable: CGPoint =         sender.convertPoint(sender.bounds.origin, toView: self.tableView)     let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable)     println(cellIndexPath)     point = cellIndexPath!.row     println(point)}SWIFT:當單元格中的按鈕被點擊時,如何獲得indexpath.row?
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

吉奧拉什幾乎有了答案,但他忽略了一個事實,那就是細胞有多余的contentView圖層。因此,我們必須走得更深一點:

guard let cell = sender.superview?.superview as? YourCellClassHere else {
    return // or fatalError() or whatever}let indexPath = itemTable.indexPath(for: cell)

這是因為在視圖層次結構中,tableView有單元格作為子視圖,這些單元格隨后具有自己的“內容視圖”-這就是為什么您必須獲得此內容視圖的SuperView才能獲得單元格本身。因此,如果您的按鈕包含在子視圖中,而不是直接放在單元格的內容視圖中,那么您將不得不進行更深層次的訪問。

上述方法就是這樣一種方法,但不一定是最好的方法。雖然它是可以使用的,但它假定了關于UITableViewCell這一點蘋果從來沒有必要記錄下來,比如它的視圖層次結構。將來可能會改變這種情況,因此,上述代碼的行為很可能是不可預測的。

因此,出于壽命和可靠性的原因,我建議采用另一種方法。這篇帖子列出了許多備選方案,我鼓勵大家讀一讀,但我個人最喜歡的內容如下:

在單元格類上持有一個閉包的屬性,讓按鈕的操作方法調用它。

class MyCell: UITableViewCell {
    var button: UIButton!

    var buttonAction: ((Any) -> Void)?

    @objc func buttonPressed(sender: Any) {
        self.buttonAction?(sender)
    }}

然后,當您在cellForRowAtIndexPath,您可以為您的閉包分配一個值。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! MyCell
    cell.buttonAction = { sender in
        // Do whatever you want from your button here.    }
    // OR    cell.buttonAction = buttonPressed(closure: buttonAction, indexPath: indexPath) 
    // <- Method on the view controller to handle button presses.}

通過將處理程序代碼移到這里,您可以利用已經存在的indexPath爭論。這是一種更安全的方法,因為上面列出的方法不依賴于無文檔的特性。


查看完整回答
反對 回復 2019-06-17
  • 3 回答
  • 0 關注
  • 1462 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號