滚动时collectionview更改单元格背景图像

Posted

技术标签:

【中文标题】滚动时collectionview更改单元格背景图像【英文标题】:collectionview change cell background image when scrolling 【发布时间】:2016-02-19 07:44:43 【问题描述】:

嗨,我在我的应用程序中使用 collectionview。并且当我选择任何单元格时它运行良好,我只需更改该单元格的背景图像。但是当我滚动更改背景图像的集合视图时,它会自动更改为默认图像。那是我的问题。

这是我的代码

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell : seat_cell = collectionView.dequeueReusableCellWithReuseIdentifier("seat_cell", forIndexPath: indexPath) as! seat_cell
    cell.backgroundView = UIImageView()
    let data : SeatDetailModel = get_seat_detail.objectAtIndex(indexPath.row) as! SeatDetailModel


    if (data.KoltukStr == "PI") || (data.KoltukStr == "MA") || (data.KoltukStr == "SA") || (data.KoltukStr == "KA") || (data.KoltukStr == "KO")
    
        cell.backgroundColor = UIColor.clearColor()
        cell.lblname.text = ""
        cell.backgroundView = nil
    

    else
    
        cell.lblname.text = data.KoltukStr


        if (data.DurumYan == "2") && (data.Durum == "0")
        

            cell.backgroundView = UIImageView(image: UIImage(named: "seat_men"))
            cell.userInteractionEnabled = true
        
        else if (data.DurumYan == "1") && (data.Durum == "0")
        


           cell.backgroundView = UIImageView(image: UIImage(named: "seat_lady"))
            cell.userInteractionEnabled = true
        
        else if (data.Durum == "0")
        

            //cell.backgroundColor = UIColor(patternImage: UIImage(named: "seat_green")!)
            cell.backgroundView = UIImageView(image: UIImage(named: "seat_green"))
            cell.userInteractionEnabled = true
        
        else
        

            if (data.Durum == "1") || (data.Durum == "3") || (data.Durum == "5")
            
                cell.backgroundView = UIImageView(image: UIImage(named: "blank_seat"))
                cell.userInteractionEnabled = false
            
            else
            
                cell.backgroundView = UIImageView(image: UIImage(named: "blank_seat"))
            


        
    
    return cell

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 

    let cell : seat_cell = collectionView.cellForItemAtIndexPath(indexPath) as! seat_cell
    let data : SeatDetailModel = get_seat_detail.objectAtIndex(indexPath.row) as! SeatDetailModel

    if (Gender.isEmpty)
    
        alertViewShow(self, title: "Alert", message: "Please Select Gender before Seat Selection")

    
    else
    
       seatcount = seatcount + 1

        if (data.DurumYan == "1") && (data.Durum == "0")
        
            cell.backgroundView = UIImageView(image: UIImage(named: "seat_lady_checked"))
            selectedseat = true
        
        else if (data.DurumYan == "2") && (data.Durum == "0")
        
            cell.backgroundView = UIImageView(image: UIImage(named: "seat_men_checked"))
            selectedseat = true
        
        else if (data.Durum == "0")
        
           cell.backgroundView = UIImageView(image: UIImage(named: "seat_green_checked"))
            selectedseat = true
        

    

    print(data.KoltukStr)



func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 

    return get_seat_detail.count

这是加载集合视图并且我选择一个单元格时的图像。但是当我滚动所有我选择的单元格背景时,我会默认。那我该如何解决。我想要的是即使在滚动集合视图之后选择任何单元格,也必须选择单元格背景

【问题讨论】:

将选定单元格的索引存储在某个数组中,然后检查cellForItemAtIndexPath 中该数组是否包含当前索引并相应地设置图像。 对不起,你能给我一行代码吗? @EICaptain。 【参考方案1】:

您需要维护每个座位的状态,例如选中与否。根据您需要在 cellForItemAtIndexPath 中设置图像的状态

if (data.DurumYan == "2") && (data.Durum == "0")
                
                    var image:UIImage?
                    if selected == true
                    

                        //image =  selected image
                    
                    else
                    
                        // image = non selected image
                    

                    cell.backgroundView = UIImageView(image: image!)
                    cell.userInteractionEnabled = true
                

【讨论】:

已经试过了。但这会导致滚动时选择所有座位 你是如何维护状态的? 可以在 SeatDetailModel 中维护状态 非常感谢@Savitha,我只是维护模型中的状态及其对我的工作。会为你应得的答案投票【参考方案2】:

在您的 collectionView 数据源方法中使用它... 当collection view scrooling here是解决方案时,你会遇到这个问题试试这个!!

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
        cell.background.image=nil;
cell.background.image=[UIImage imageNamed:@"background.png"];


【讨论】:

以上是关于滚动时collectionview更改单元格背景图像的主要内容,如果未能解决你的问题,请参考以下文章

仅更改一个 collectionview 单元格的对象

垂直和水平滚动collectionView选择单元格问题

当collectionView滚动时,如何使iOS collectionView的特定单元格淡出?

滚动后集合视图单元格 alpha 正在更改

在didHighlightItemAt上更改UICollectionViewCell中的背景并且在滚动时didUnhighlightItemAt闪烁

根据 IndexPath 设置特定 CollectionView 单元格的背景颜色