在 swift 中选择时,节标题背景颜色会发生变化

Posted

技术标签:

【中文标题】在 swift 中选择时,节标题背景颜色会发生变化【英文标题】:Section header background color changes when selected in swift 【发布时间】:2020-07-14 07:34:04 【问题描述】:

我有一个包含多个部分的表格视图。我有两种颜色。白色和蓝色。如果某个部分满足要求,则应将其永久设置为蓝色背景。我有一个问题。我可以设置部分标题的背景颜色,但蓝色仅在选择部分标题时可见。我希望看到满足要求的所有部分标题都设置为蓝色,其他部分标题设置为白色。我已经尝试寻找答案,但我看不到任何此类问题。

这是我的代码

 //i put all the index of the sections that satisfy this requirement in an array
 if(objModel.getPaidStatus(index:indexPath.section, subIndex: indexPath.row) == "paid") || (objTeacherVewModel.getPaidStatus(index:indexPath.section, subIndex: indexPath.row) == "firstFree")
           cell.btnDelete.isHidden = true
            cell.containerVew.backgroundColor = #colorLiteral(red: 0.4935901165, green: 0.7977404594, blue: 0.860445559, alpha: 1)
         
            bookedSection =  indexPath.section
            
            bookedArr.append(indexPath.section)
            print(bookedArr)
    

下面是我更改标题背景颜色的地方

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    if(tableView == hrsTblVew)
        return nil
    
    else
      
    let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width-40, height: 40))
    
    let imgView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
 
    if(selectedSection == section)
        imgView.image = #imageLiteral(resourceName: "uparrow")
    else
        imgView.image = #imageLiteral(resourceName: "dropdown")
    
    headerView.addSubview(imgView)
        print(bookedSection)
        
        for item in bookedArr
        if( section == item)
                           
            headerView.backgroundColor = #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)
        
            
            
                       
            else
                           
            headerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
            
            
        
    
    let lbl = UILabel(frame: CGRect(x: 40, y: 0, width: tableView.frame.width-50, height: 40))
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    if let date = dateFormatter.date(from: objModel.getDateString(index: section))
        
        
        dateFormatter.dateFormat = "EEEE, dd-MM-yyyy"
        
        let dayStr = dateFormatter.string(from: date)
        lbl.text = Utility.shared().getCurrentDay(str:dayStr, currentLang:UserDefaults.standard.object(forKey:"language")as?String ?? "pl-PL")
        
    
    
    
    lbl.textColor = UIColor.darkGray
    lbl.font = UIFont(name:"Montserrat-SemiBold", size: 16)
    headerView.addSubview(lbl)
    
    
    let btn = UIButton(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 40))
    btn.addTarget(self, action: #selector(headerTapped(sender:)), for: .touchUpInside)
    btn.tag = section + 1
    headerView.addSubview(btn)
        
        
        
    
    return headerView
    

【问题讨论】:

什么是bookedArr?在更改headerView.backgroundColor 时,您想通过循环通过bookedArr 来实现什么。 bookedArr 有我想要将背景颜色设置为蓝色的部分的索引。 【参考方案1】:

试试这个,

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    //rest of the code...
    if bookedArr.contains(section) 
        headerView.backgroundColor = #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)
     else 
        headerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    
    //rest of the code...
    return headerView

【讨论】:

当我加载页面时,它仍然不会出现,直到我选择标题。如何在视图加载或其他内容上添加这种功能?

以上是关于在 swift 中选择时,节标题背景颜色会发生变化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中选择项目时更改卡片颜色?

[TextInputLayout使用自动完成功能时背景颜色会发生变化

突出显示/选择时的 UITableViewCell 背景颜色

视图控制器完成加载时 UIView 背景颜色发生变化

使按钮的背景颜色在单击后更改并保持不变

jQuery:悬停链接时在div中动画(淡化)背景颜色或图像?