3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
Swift中最簡(jiǎn)單,最有效的方法是回調(diào)閉包。
子類UITableViewCell,用于標(biāo)識(shí)UI元素的viewWithTag方法已過(guò)時(shí)。
將自定義單元格的類設(shè)置為子類的名稱,并ButtonCellIdentifier在Interface Builder 中將標(biāo)識(shí)符設(shè)置為。
添加一個(gè)callback屬性。
添加一個(gè)動(dòng)作并將按鈕連接到該動(dòng)作。
class ButtonCell: UITableViewCell {
var callback : (()->())?
@IBAction func buttonPressed(_ sender : UIButton) {
callback?()
}
}
在cellForRow回調(diào)分配到自定義單元格。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonCellIdentifier", for: indexPath) as! ButtonCell
cell.callback = {
print("Button pressed", indexPath)
}
return cell
}
當(dāng)按下按鈕時(shí),將調(diào)用回調(diào)。索引路徑被捕獲。
編輯
如果可以添加或刪除細(xì)胞,則有一個(gè)警告。在這種情況下,通過(guò)從數(shù)據(jù)源數(shù)組獲取當(dāng)前索引來(lái)更新索引路徑
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonCellIdentifier", for: indexPath) as! ButtonCell
let item = dataSourceArray[indexPath.row]
// do something with item
cell.callback = {
let actualIndexPath = IndexPath(row: dataSourceArray.index(of: item)!, section: indexPath.section)
print("Button pressed", actualIndexPath)
}
return cell
}
如果甚至section可以更改,那么協(xié)議/代理可能會(huì)更有效。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是我用的:
首先初始化按鈕作為Outlet和其action上的TableViewCell
class MainViewCell: UITableViewCell {
@IBOutlet weak var testButton: UIButton!
@IBAction func testBClicked(_ sender: UIButton) {
let tag = sender.tag //with this you can get which button was clicked
}
}
然后在您的主控制器中的cellForRow函數(shù)中,像這樣初始化按鈕的標(biāo)簽:
class MainController: UIViewController, UITableViewDelegate, UITableViewDataSource, {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MainViewCell
cell.testButton.tag = indexPath.row
return cell
}
}
- 3 回答
- 0 關(guān)注
- 998 瀏覽
添加回答
舉報(bào)