如何使用swift在表视图上按下时如何更改标签文本颜色?

时间:2015-04-27 12:33:33

标签: ios swift xcode uitableview

我有一个UITableView,其中包含一个UILabel的单元格。我希望按下单元格时单元格标签文本颜色会发生变化。我该怎么做?

这就是我的尝试:

 func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell

        let label:UILabel = cell.viewWithTag(1) as UILabel
        label.textColor = UIColor(red: 46/255.0, green: 204/255.0, blue: 113/255.0, alpha: 1.0)
        cell.reloadInputViews()



    }

4 个答案:

答案 0 :(得分:3)

UITableViewCell子类并覆盖setSelected。

<div id="tabs-2">
    <div class="MT10" ng-init="getPaymentDetailsById()"><!--getPaymentDetailsById()-->
        <div class="panel">
          <div class="form-group">
            <label> Name:</label>
                <span class="rightside">
                        <input type="text" value="" ng-model="singleGatewayDetails.name" >
               </span>
          </div>
          <div class="form-group">
            <label> APP :</label>
            <span class="rightside">       
                <input type="text" value=""  ng-model="paymentDetails.id" ng-disabled="appId">
            </span>
          </div>
          <div class="form-group">
            <label> APP KEY:</label>
              <span class="rightside">       
                  <input type="text" value=""  ng-model="singleGatewayDetails.appKey" > 
              </span>
          </div>
          <div class="form-group">
            <label> APP SECRET:</label>
              <span class="rightside">       
                  <input type="text" value=""  ng-model="singleGatewayDetails.appSecret">
              </span>
          </div>

        </div>
      </div>
  </div>

答案 1 :(得分:0)

实现didDeselectRowAtIndexPath委托方法。在此方法中,您应该将标签设置回正常颜色。

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
  let cell = tableView.cellForRowAtIndexPath(indexPath)
  let label: UILabel = cell.viewWithTag(1) as UILabel
  label.textColor = UIColor.redColor()
}

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
  let cell = tableView.cellForRowAtIndexPath(indexPath)
  let label: UILabel = cell.viewWithTag(1) as UILabel
  label.textColor = UIColor.blackColor()
}

此外,除非您确实需要,否则请删除.reloadInputViews()。这可能会消除textColor的任何更新。

答案 2 :(得分:0)

Swift 3版看起来像:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    if (selected) {
         self.artistLabel.textColor = UIColor.lightGray
    } else {
         self.artistLabel.textColor = UIColor.black
    }
}

只是提到这比使用didSelectRowAtIndexPath更清晰,更好的方法

答案 3 :(得分:0)

我通常在这种情况下使用的是覆盖setHighlighted子类中的UITableViewCell

override func setHighlighted(_ highlighted: Bool, animated: Bool) {
    super.setHighlighted(highlighted, animated: animated)
    label.textColor = UIColor.redColor()
}

为此,您必须使用自定义表格视图单元格来覆盖特定方法。