按钮标签自动更改

时间:2015-11-17 05:37:11

标签: ios swift collectionview

我有一个collectionViewCell我想要添加一个功能的按钮(喜欢/不像功能)如果用户喜欢这个帖子,那么post标签应该设置为1,(颜色变为蓝色)如果用户与按钮标签不同,它重置为0.(颜色变为白色)我当前遇到的问题是在我的collectionView中按下随机按钮时按钮颜色正在改变,即使没有选中。

 class customCollectionViewCell: UICollectionViewCell {
        @IBAction func followBtn(sender: UIButton) {
            if (sender.tag == 0){
                likePost{(msg)
                in
                    if (msg == 0){
                        self.likeBtn.tintColor = UIColor.blueColor()
                        self.likeBtn.tag = 1
                    }
                }
            }
            else{
              //Unfollow function
               self.likeBtn.tintColor = UIColor.whiteColor()
                self.likeBtn.tag = 0
            }
        }
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("posterCell", forIndexPath: indexPath)
                as! customCollectionViewCell

     cell.likeBtn.tag = 0
            if (cell.liketBtn.tag == 0){
            cell.followArtistBtn.tintColor = UIColor.whiteColor()

            }
            if (cell.likeBtn.tag == 1){
           cell.followArtistBtn.tintColor = UIColor.blueColor()
            }
}

4 个答案:

答案 0 :(得分:1)

这是由于细胞重用。您必须在cellForItemAtIndexPath中设置默认值,然后根据您的数据相应地更改按钮的颜色。

答案 1 :(得分:1)

由于您没有根据按钮的选择更改数据源,因此发生此问题。这是一些基本步骤

var users = NSMutableArray()
let user1 = ["name" : "Sample User 1", "age": 21, "isFav": 0];
let user2 = ["name" : "Sample User 2", "age": 21, "isFav": 0];
users = [user1, user2]

@IBAction func followBtn(sender: UIButton) {
    var dicUser =  NSMutableDictionary(dictionary: users [sender.tag])
    dicUser["isFav"] = (dicUser.valueForKey("isFav") as! Bool) ? 0 : 1;
    users.replaceObjectAtIndex(sender.tag, withObject: dicUser)
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
   let cell = collectionView.dequeueReusableCellWithReuseIdentifier("posterCell", forIndexPath: indexPath)
                as! customCollectionViewCell
   cell.likeBtn.tag = indexPath.row
   cell.followArtistBtn.tintColor =(users[sender.tag]].valueForKey("isFav") as! Bool) ? UIColor.whiteColor() : UIColor.blueColor();
}

答案 2 :(得分:0)

这种情况正在发生,因为集合视图每次都重用相同的单元格。 为此你根据每个单元格位置将你的标签存储在一个数组中...当用户滚动和单元格加载时......检查该标签的标签是1还是0 ...并根据该标签更改按钮颜色

答案 3 :(得分:0)

这是因为细胞重复使用。您必须在cellforrowatindexpath中将默认值设置为单元格,然后将值分配给控件。

如果您习惯于创建少量行,则可以在不重用单元格的情况下为每一行出列单元格。但它不是大量行的最佳实践。