所以我有一个自定义的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中的选定单元格。
答案 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