在SO的帮助下,我设法为单元格内的按钮提供了这种方法。
的cellForRowAtIndexPath
let cell = tableView.dequeueReusableCellWithIdentifier("buildCell", forIndexPath: indexPath) as! UITableViewCell
let mapsbut = cell.viewWithTag(912) as! UIButton
mapsbut.tag = indexPath.row
mapsbut.addTarget(self, action: "mapsHit:", forControlEvents: UIControlEvents.TouchUpInside)
return cell
的ViewController
func mapsHit(sender: UIButton!){
passBuild = buildings[sender.tag]
performSegueWithIdentifier("mapSegue2", sender: self)
}
现在发生的事情是当我滚动表格视图时,我在行上遇到致命错误:
let mapsbut = cell.viewWithTag(912) as! UIButton
带有消息:unexpectedly found nil while unwrapping an Optional value
所以,正在发生的事情是,视图标签在函数内部发生了变化,当我尝试在下一个单元格中引用它时,912
已被更改。
为了解决这个问题,我在mapsHit
函数
sender.tag = 912
但现在我需要以下条件:
if the button isn't clicked, change tag to 912
这似乎不太可能。
有解决方法吗?
答案 0 :(得分:1)
像这样设置自定义单元格:
<强> buildingCell 强>
class buildingCell: UITableViewCell {
@IBOutlet weak var mapsbut: UIButton!
}
<强>的cellForRowAtIndexPath 强>
let cell = tableView.dequeueReusableCellWithIdentifier("buildCell", forIndexPath: indexPath) as! buildingCell
cell.mapsbut.tag = indexPath.row
cell.mapsbut.addTarget(self, action: "mapsHit:", forControlEvents: UIControlEvents.TouchUpInside)
return cell
并保持mapsHit
功能完全相同。
这样您就不必担心初始引用的标记,因此您不会遇到任何错误!