对UIButton的更改不会更新单元格直到滚动

时间:2015-05-26 14:06:09

标签: ios uitableview swift uibutton

我使用UIButtonState(duhz)解决了这个问题,但我很好奇为什么完全这首先不起作用。

我在故事板中定义了“普通”图标,然后将其配置为在设置对象时显示“突出显示”图标。但是,当表首次加载时,我没有看到更新的图标。

但滚动表格后,突出显示的图标显示出来。这里发生了什么?

class TweetCell: UITableViewCell {


    @IBOutlet weak var profileImage: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var tweetLabel: UILabel!
    @IBOutlet weak var timeStampLabel: UILabel!
    @IBOutlet weak var favButton: UIButton!
    @IBOutlet weak var replyButton: UIButton!
    @IBOutlet weak var retweetButton: UIButton!

    var tweet: Tweet!{
        didSet {
            profileImage.setImageWithURL(NSURL(string:tweet.user.profile_image_url))
            nameLabel.text = tweet.user.name
            tweetLabel.text = tweet.text

            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "h:mm"
            let str = dateFormatter.stringFromDate(tweet.createdAt)
            timeStampLabel.text = str

            if (tweet.favorited) {
                favButton.imageView?.image = UIImage(named: "star_highlighted.png")
            } else {

            }

            if (tweet.retweeted) {
                retweetButton.imageView?.image = UIImage(named: "retweet_highlighted.png")
            } else {

            }

        }
    }

//滚动之前 enter image description here

//滚动后 enter image description here

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为tableview正在重用具有突出显示的图像视图的单元格。要解决此问题,您需要在else部分设置未突出显示的图像。

if (tweet.favorited) {
                favButton.imageView?.image = UIImage(named: "star_highlighted.png")
            } else {
    favButton.imageView?.image = UIImage(named: "star_unhighlighted.png")
            }

答案 1 :(得分:1)

不确定原因,但你可以用它来修复,我知道你已经修复它但仍然发布修复这个问题的方法。

[cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];