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

时间:2016-01-06 07:14:34

标签: ios swift uitableview

所以我有一个自定义的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)
}

这就是我的视图控制器的样子,省略了不相关的代码:

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来保持选定的单元格并尝试操纵其子视图时,即隐藏子视图时,它不起作用。似乎currentCell根本没有引用tableView中的选定单元格。

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码找到索引路径:

@IBAction func buttonAction(sender: UIButton) {

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

    let indexPath = tableView.indexPathForRowAtPoint(point)

    // (use your index path)
}

接下来,您可以手动调用self.tableView(_:cellForRowAtIndexPath:)传递获取的索引路径,但这可能会配置一个新的(重用的)表视图单元实例,以显示与该索引路径(行,节)关联的数据。 / p>

如果你想获得屏幕上按下按钮的完全相同的表格视图单元格实例,你将不得不做一些不同的事情,可能是丑陋的;或许可以从按钮开始遍历视图层次结构并转向其超级视图?

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

cellForRowAtIndexPath()的文档中未提及,但我制作了一个示例项目来测试它:

<强> TableViewController.swift

UITAbleView
为了简洁,省略了{p> /* 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!") } } 检查。在生产代码中,不要强制解包选项!)

答案 1 :(得分:2)

我不太了解斯威夫特,但Obj-c。 实际上我认为你可以将<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <p id="txt" ></p> <button id="plus">Plus</button> <p id="val" ></p>方法放入test:类,即

CustomCell