UITutViewCell选择器中的UIButton未被调用

时间:2015-06-24 09:05:20

标签: ios swift

我在Storyboard中添加了UIButton UITableViewCell。当我按下时,应该调用一个动作:

@IBAction func modifyFavouriteStatus(sender: UIButton) {
    favouriteBool = false
    var emptyHeart = UIImage(named: "Red_Heart_Empty_x23px.png")?.imageWithRenderingMode(.AlwaysTemplate)
    favouriteButton.setImage(emptyHeart, forState: UIControlState.Normal)
}

然而,调用方法didSelectRowAtIndexPath。我希望只有当我按下单元格本身而不是按钮时才会调用它。

P.S。用户交互已在按钮上启用

编辑:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("SpotlightCell", forIndexPath: indexPath) as! SpotlightCell

    let userObject = self.objectArray[indexPath.section] as! PFUser
    cell.passedUser = userObject

    if userObject["profileImage"] != nil{
    let userImageFile = userObject["profileImage"] as! PFFile
    let url = NSString(string:userImageFile.url!)
    cell.profileImage.sd_setImageWithURL(NSURL(string: url as String), placeholderImage:UIImage())
    }

    if userObject["username"] != nil{
        let username = userObject["username"] as! String
        cell.labelName.text = username
    }

    //return cell
    return cell
}

class SpotlightCell: UITableViewCell {
    @IBOutlet weak var profileImage: UIImageView!
    @IBOutlet weak var labelName: UILabel!
    @IBOutlet weak var favouriteButton: UIButton!

    var passedUser : PFUser!
    var label : UILabel?
    var favouriteBool = false

    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = UITableViewCellSelectionStyle.None
    self.contentView.backgroundColor = UIColor.clearColor()
        self.backgroundColor = UIColor.clearColor()
    }

    ...

     //the IBAction was here before
}

1 个答案:

答案 0 :(得分:0)

简单地说,UITableViewCells有一个contentView。这可以并且将被放置在自定义表格视图单元格中的其他视图之前,以便拾取触摸并检测单元格选择。这样做可能会阻止其后面的任何视图的触摸。通过执行cell.contentView.addSubview(cell.favouriteButton)修复错误。

请注意,在我的故事板中,favouriteButton已经显示为contentView的子视图,因此这可能会让您认为它是它的子视图。出于某种原因,它不是。