单元格中的UIButton不会改变

时间:2015-08-11 09:57:09

标签: ios swift uitableview uibutton

我有一个UITableView和一些自定义单元格,到目前为止一切正常。我使用UIButton创建了一个自定义UITableViewCell类和原型,我希望在将单元格加载到表格时提供自定义图像和文本。

代码背景:

这是在UITableView控制器的tableView(tableView: UITableView, cellForRowAtIndexPath: NSIndexPath)中,控制器将某些数据存储在'catch'ivar中,而ivar则将图像放在按钮中以及文本值。自定义UITableViewCellImageTitleTableViewCell,它只有IBOutlet属性,如下所示 - 两个标签和myImageButton UIButton。

let cell: ImageTitleTableViewCell = tableView.dequeueReusableCellWithIdentifier("ImageTitleCell") as! ImageTitleTableViewCell
//Happily this never triggers.
assert(cell.myImageButton.imageView != nil, "Bad image button.")
cell.myImageButton.imageView!.image = catch.image
if catch.image != nil {
    cell.myImageButton.titleLabel!.text = ""
    println(cell.myImageButton.titleLabel!.text)
    // Always logs the the default value of the button text which isn't "".
} else {
    cell.myImageButton.titleLabel!.text = "None."
}
//These two work fine though.
cell.speciesLabel.text = catch.species
cell.dateLabel.text = catch.date.description
return cell

它也没有放入图像。我们可以确信catch.image在测试时确实包含有效的UIImage。

2 个答案:

答案 0 :(得分:2)

不要直接为按钮设置图像和文本。使用func set<X>(forState:)func <X>ForState:)方法。

cell.myImageButton.setImage(catch.image, forState:.Normal)

cell.myImageButton.setTitle("", forState:.Normal)

代码变为

cell.myImageButton.setImage(catch.image, forState:.Normal)
if catch.image != nil {
    cell.myImageButton.setTitle("", forState:.Normal)
    println(cell.myImageButton.titleForState(.Normal))
    // Always logs the the default value of the button text which isn't "".
} else { 
    cell.myImageButton.setTitle("None.", forState:.Normal)
}

答案 1 :(得分:0)

使用以下内容更新图片:

cell.myImageButton.setImage(UIImage(named: "imgTest.png"), forState: UIControlState.Normal) 

OR代码:

cell.myImageButton.setImage(catch.image, forState: UIControlState.Normal)