我有一个我想要点击的收藏夹按钮,以便将单元格标记为收藏夹。细胞也是可以点击的。
这是UITableViewCell的子类。我添加了按钮,但是我无法调用目标操作。换句话说,我点击单元格中的按钮,但没有任何反应:
class ServerSelectionTableViewCell: UITableViewCell {
let isSelected = UIImage(named: "icon.png")
let unselected = UIImage(named: "star.png")
var favoriteButton: UIButton? = nil
var server : Server? = nil {
didSet{
if let theServer = server {
var server : String? = theServer.serverCode
self.textLabel?.text = serverCode
server?.isActive() { success in
self.accessoryType = success ? .Checkmark : .None
}
}
}
}
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .Subtitle, reuseIdentifier: reuseIdentifier)
self.detailTextLabel?.textColor = UIColor.grayColor()
self.favoriteButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
self.favoriteButton?.setImage(unselected, forState: UIControlState.Normal)
self.favoriteButton?.setImage(isSelected, forState: UIControlState.Selected)
self.favoriteButton?.addTarget(self, action: Selector("buttonAction:"), forControlEvents: UIControlEvents.TouchDown)
setTranslatesAutoresizingMaskIntoConstraints(false)
self.favoriteButton?.userInteractionEnabled = true
self.contentView.addSubview(self.favoriteButton!)
}
func buttonAction(sender:UIButton!) {
println("Button tapped")
}
override func layoutSubviews() {
super.layoutSubviews()
self.favoriteButton?.frame = CGRectMake(10, 5, 35, 35)
self.textLabel?.frame = CGRectMake(55, 5, self.bounds.width, self.bounds.height)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
永远不会调用函数buttonAction。我已经在模拟器和设备上尝试了这一点,我可以看到,当我点击收藏夹按钮时,单元格未被选中,但该功能仍未被调用。
编辑:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let reuseId = "cell"
tableView.registerClass(ServerSelectionTableViewCell.self, forCellReuseIdentifier: reuseId)
var cell = tableView.dequeueReusableCellWithIdentifier(reuseId) as ServerSelectionTableViewCell
if let servers = getServers() {
let server = servers[indexPath.row]
cell.server = server
}
return cell
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if let servers = getServers() {
let server = servers[indexPath!.row]
var cell = tableView.cellForRowAtIndexPath(indexPath) as ServerSelectionTableViewCell
println("Server selected \(server)")
}
}
答案 0 :(得分:0)
所以看起来按钮WAS注册了点击,但是
行 println("Button tapped")
实际上并没有打印到控制台,所以我认为它不是。