【问题标题】:Swift Change textColor on Selection在选择时快速更改 textColor
【发布时间】:2015-03-12 09:33:48
【问题描述】:

如何在 iOS Swift 中更改 labelcelltextColor

我希望背景不要改变。只有textColorseperatorColor(如果有)。比如:

label.highlightedTextColor = UIColor.whiteColor();

我在一些颜色变化的应用中看到了这种情况。但我无法靠近它。根据 Apple Dev Reference:

使用标签实现某类文本按钮的子类可以使用 绘制按下状态时此属性中的值 按钮。每当 highlight 属性设置为 true。

但是,标签可以很好地编译,并且不会在突出显示时改变颜色。按钮没有highlightedTextColor

【问题讨论】:

  • 那么,到目前为止你有什么?
  • @SebastianDressler 我没有找到任何参考 Dev Docs 的方法。
  • 好的,那么UITableView cell textLabel color 怎么样。它甚至显示了何时设置它的方法。它是 Objective-C,但很容易适应 IMO。
  • @SebastianDressler 在 Swift 中不起作用
  • 究竟什么在 Swift 中不起作用?

标签: ios swift ios8 ios8.1


【解决方案1】:

在方法 setSelected 中的单元格本身中,您可以覆盖它,然后提供您想要的任何颜色或突出显示状态:

覆盖 func setSelected(_ selected: Bool, 动画: Bool) { super.setSelected(selected, animated: 动画)

    if isSelected {
        // your color or highlited here
    } else {
       // your colour or highlighted here
    }
}

【讨论】:

    【解决方案2】:

    cellForRowAt indexPath 你可以添加这一行

    cell.textLabel?.textColor = UIColor.blackColor()
    

    【讨论】:

      【解决方案3】:

      我尝试在didSelectAtIndexPathdidDeselectAtIndexPath 中设置它,但颜色会延迟更改。我不喜欢那样。

      这就是我最终解决问题的方式:

      我已将我的UITableViewCell 子类化并连接了所有@IBOutlets。在awakeFromNib() 我只是这样做了:

      @IBOutlet weak var myLabel: UILabel!
      
      
      override func awakeFromNib() {
          super.awakeFromNib()        
      
          self.myLabel.highlightedTextColor = .blackColor()
      
      }
      

      现在完美运行!

      顺便说一句,这是我第一次回答堆栈溢出问题,请对我好?呵呵

      (我使用的是 Swift 2.0 和 Xcode 7.2.1)

      【讨论】:

        【解决方案4】:

        如果您(使用/不使用)自定义单元格(作为 xib),您可以选择标签,然后从实用程序中,转到突出显示并将颜色更改为您想要在选择中显示的颜色。 这是一个更清晰的快照:)

        【讨论】:

          【解决方案5】:

          您可以在didSelectAtIndexPathdidDeselectAtIndexPathcellForRowAtIndexPath中设置颜色

          func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
              tableView.cellForRowAtIndexPath(indexPath)?.textLabel?.textColor = UIColor.blackColor()
          }
          
          func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
              tableView.cellForRowAtIndexPath(indexPath)?.textLabel?.textColor = UIColor.redColor()
          }
          
          func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
          
              // Dequeue cell
              cell.textLabel?.textColor = UIColor.redColor()
          }
          

          【讨论】:

          • 逻辑加一但由于我使用导航栏,当我回来时文本仍然突出显示。而且,性能很差。仅在 segue 开始时突出显示。
          • 你是什么意思只在segue开始时突出显示?
          • @rakeshbs 我认为还有一些我们不知道的其他问题和误解。
          猜你喜欢
          • 2019-10-08
          • 1970-01-01
          • 2019-12-30
          • 2016-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-24
          相关资源
          最近更新 更多