gpt4 book ai didi

ios - 获取包含按下​​的 UIButton 的自定义 UITableViewCell

转载 作者:搜寻专家 更新时间:2023-10-31 22:21:32 25 4
gpt4 key购买 nike

所以我有一个自定义的 UITableViewCell 类:

class customCell{
let button1 = UIButton()
let view1 = UIView()
view1.frame = CGRectMake(30, 60, 10, 10)
view1.backgroundColor = UIColor.blueColor()
button1.frame = CGRectMake(10,10,50,50)
button1.addTarget(tableView(), action: "test:", forControlEvents: .TouchUpInside)
}

这是我的 View Controller 的样子,省略了不相关的代码:

class tableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
let table = UITableView()
let currentCell = customCell()
var selectedIndexPath: NSIndexPath? = nil

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedIndexPath = indexPath
let cell = table.cellForRowAtIndexPath(indexPath) as! customCell
currentCell = cell
table.beginUpdates()
tableView.endUpdates()
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if (selectedIndexPath != nil && indexPath.row == selectedIndexPath!.row && indexPath.section == selectedIndexPath!.section){
return 155
}
return 90
}

func test(sender:UIButton){
currentCell.view1.hidden = true // does not work
}
}

如代码中所示,当我使用 currentCell 来保持选中的单元格并尝试操作其 subview 时,即隐藏 subview ,它不起作用。似乎 currentCell 根本没有引用 tableView 中的选定单元格。

最佳答案

你可以用这段代码找到索引路径:

@IBAction func buttonAction(sender: UIButton) {

let point = sender.convertPoint(CGPointZero, toView: tableView)

let indexPath = tableView.indexPathForRowAtPoint(point)

// (use your index path)
}

接下来,您可以手动调用 self.tableView(_:cellForRowAtIndexPath:) 传递获取的索引路径,但这可能会配置一个新的(重用的) TableView 单元格实例来显示关联的数据使用该索引路径(行,部分)。

如果你想获得屏幕上完全相同的表格 View 单元格实例并且按下了它的按钮,你将不得不做一些不同的事情,而且可能很丑陋;也许从按钮开始遍历 View 层次结构并朝向它的父 View ?


更新: 数据源方法: tableView(_:cellForRowAtIndexPath:) 肯定会配置一个不同的(可能重用的)UITableViewCell 实例,但是 UITableView 方法: cellForRowAtIndexPath() 将为您提供与屏幕上相同的实例。

UITAbleView 的文档中没有提到它,但我做了一个示例项目来测试它:

TableViewController.swift

/* 
Table cells are of custom subclass TableViewCell, with one outlet declared like this:

@IBOutlet weak var button:UIButton!

The button is connected with this action in the custom UITableViewController subclass that holds the table view:
*/
@IBAction func buttonAction(sender: UIButton)
{
let point = sender.convertPoint(CGPointZero, toView: tableView)

let indexPath = tableView.indexPathForRowAtPoint(point)

let cell = tableView.cellForRowAtIndexPath(indexPath!) as! TableViewCell

let cellButton = cell.button

if cellButton == sender {
// Same button instance, means also same
// instance of table view cell:

print ("same instance!")
}
}

(为简洁起见,省略了nil 检查。在生产代码中,不要强制解包可选值!)

关于ios - 获取包含按下​​的 UIButton 的自定义 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34627581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com