在 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 中选择时,节标题背景颜色会发生变化的主要内容,如果未能解决你的问题,请参考以下文章
[TextInputLayout使用自动完成功能时背景颜色会发生变化