如何在表格视图中增加所选索引的字体颜色和字体大小?

Posted

技术标签:

【中文标题】如何在表格视图中增加所选索引的字体颜色和字体大小?【英文标题】:How to increase font colour and font size of selected index in table view? 【发布时间】:2017-12-29 09:16:38 【问题描述】:

在这里我需要实现这个页面,如图所示,我放置了一个表格视图和集合视图,但是如果我选择特定类别,那么如何使所选字体大小更大,字体颜色需要是如图所示更改,但在运行应用程序后,如果我选择当时打开的屏幕,首先默认应选择What's New,稍后需要更改为我选择的内容,谁能帮我解决这个问题?

这是我的屏幕,设计如下:

这是我设计的屏幕,在这个问题中:

这是我已经尝试过的代码

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "categoriesTableCell", for: indexPath)  as! categoriesTableViewCell
    if indexPath.row == currentSelection 
    let item = categoriesModelClass?.childrenData[indexPath.row]
    cell.categoriesProductsLabel.font = UIFont(name:"Bold", size:17)
    cell.categoriesProductsLabel.textColor = UIColor.black
    let underlineAttribute = [NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue]
    let underlineAttributedString = NSMutableAttributedString(string: (item?.name)! , attributes: underlineAttribute)
            underlineAttributedString.addAttribute(NSUnderlineColorAttributeName, value: UIColor.cyan, range: NSRange(location: 0, length: (item?.name?.characters.count)!))
            cell.categoriesProductsLabel.attributedText = underlineAttributedString
    
    else 
          let item = categoriesModelClass?.childrenData[indexPath.row]
          print(item?.name)
          cell.categoriesProductsLabel.textColor = UIColor.darkGray
          //cell.categoriesProductsLabel.font = UIFont.init(name: "Regular", size: 12)
          cell.categoriesProductsLabel.text = item?.name
    
    return cell

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let previousSelection = self.currentSelection
    self.currentSelection = indexPath.row
    self.categoriesCollectionView.reloadData()
    print(indexPath.row)
    if previousSelection == 0 
        sideTableView.reloadRows(at: [indexPath], with: .none)
    
    else 
        let prevIndexPath = IndexPath(row: previousSelection, section: 0)
        self.sideTableView.reloadRows(at: [prevIndexPath,indexPath], with: .none)
    

【问题讨论】:

【参考方案1】:

像这样在 categoriesTableViewCell 类中覆盖 setSelected 方法,并且不要在 cellForRowAtdidSelectRowAt

中更新
override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)
    if selected
        categoriesProductsLabel.font = UIFont(name:"Bold", size:17)
        categoriesProductsLabel.textColor = UIColor.black

     else
        categoriesProductsLabel.textColor = UIColor.darkGray
        categoriesProductsLabel.font = UIFont.init(name: "Regular", size: 12)

     

【讨论】:

【参考方案2】:

Ovveride didSelectRowAtIndexPath 和 didDeselectRowAtIndexPath 这两种方法来改变和恢复原始字体大小和颜色

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
          //get cell with indexpath
  cell.categoriesProductsLabel.font = UIFont(name:"Bold", size:17)
    cell.categoriesProductsLabel.textColor = UIColor.black


func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 
     //get cell with indexpath
     cell.categoriesProductsLabel.textColor = UIColor.darkGray
    cell.categoriesProductsLabel.font = UIFont.init(name: "Regular", size: 12)

    

【讨论】:

如果此解决方案不起作用,则使用与您发布的相同但维护单元格引用数组或为选定和未选定单元格创建不同的出队标识符。重新加载 didSelectRowAtIndexPath 中的所有表。【参考方案3】:

您必须更新 if 条件,您的代码也将按您的意愿工作:-

替换这个:-

if previousSelection == 0 
    sideTableView.reloadRows(at: [indexPath], with: .none)

else 
    let prevIndexPath = IndexPath(row: previousSelection, section: 0)
    self.sideTableView.reloadRows(at: [prevIndexPath,indexPath], with: .none)

有了这个:-

    let prevIndexPath = IndexPath(row: previousSelection, section: 0)
    self.sideTableView.reloadRows(at: [prevIndexPath,indexPath], with: .none)

【讨论】:

以上是关于如何在表格视图中增加所选索引的字体颜色和字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改vim中的字体颜色

如何在 iOS Swift4 中滚动时增加/减少 UILabel 字体大小以及宽度和高度

如何在 Xcode 中增加字体大小以实现 swift [重复]

增加悬停链接的字体大小会改变背景颜色大小,如何阻止这种情况?

使用ivew组件,如何对table组件实现每行可以配置(字体颜色、大小,每行的背景颜色,固定表头等)

如何更改所选 TabPage 的字体和/或颜色?