第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

SWIFT:當(dāng)單元格中的按鈕被點(diǎn)擊時(shí),如何獲得indexpath.row?

SWIFT:當(dāng)單元格中的按鈕被點(diǎn)擊時(shí),如何獲得indexpath.row?

溫溫醬 2019-06-17 17:21:45
我有一個(gè)帶有按鈕的表視圖,當(dāng)其中一個(gè)按鈕被點(diǎn)擊時(shí),我想使用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:當(dāng)單元格中的按鈕被點(diǎn)擊時(shí),如何獲得indexpath.row?
查看完整描述

3 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

吉奧拉什幾乎有了答案,但他忽略了一個(gè)事實(shí),那就是細(xì)胞有多余的contentView圖層。因此,我們必須走得更深一點(diǎn):

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

這是因?yàn)樵谝晥D層次結(jié)構(gòu)中,tableView有單元格作為子視圖,這些單元格隨后具有自己的“內(nèi)容視圖”-這就是為什么您必須獲得此內(nèi)容視圖的SuperView才能獲得單元格本身。因此,如果您的按鈕包含在子視圖中,而不是直接放在單元格的內(nèi)容視圖中,那么您將不得不進(jìn)行更深層次的訪問(wèn)。

上述方法就是這樣一種方法,但不一定是最好的方法。雖然它是可以使用的,但它假定了關(guān)于UITableViewCell這一點(diǎn)蘋果從來(lái)沒(méi)有必要記錄下來(lái),比如它的視圖層次結(jié)構(gòu)。將來(lái)可能會(huì)改變這種情況,因此,上述代碼的行為很可能是不可預(yù)測(cè)的。

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

在單元格類上持有一個(gè)閉包的屬性,讓按鈕的操作方法調(diào)用它。

class MyCell: UITableViewCell {
    var button: UIButton!

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

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

然后,當(dāng)您在cellForRowAtIndexPath,您可以為您的閉包分配一個(gè)值。

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.}

通過(guò)將處理程序代碼移到這里,您可以利用已經(jīng)存在的indexPath爭(zhēng)論。這是一種更安全的方法,因?yàn)樯厦媪谐龅姆椒ú灰蕾囉跓o(wú)文檔的特性。


查看完整回答
反對(duì) 回復(fù) 2019-06-17
  • 3 回答
  • 0 關(guān)注
  • 1467 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)