自定义单元格标签仅在选择行时显示

时间:2014-10-04 00:34:15

标签: ios swift uistoryboard

我正在使用swift与XCode6构建iPhone应用程序。我遇到了一个问题,我添加到单元格的标签仅在选择单元格行时显示。当标签移动到单元格内容视图之外时(例如,导航栏),标签出现。无论是否选中该行,默认的textLabel都会显示正常。

这里有一个关于界面构建器+实际行为的屏幕截图的imgur。 http://imgur.com/a/5fO4H

定义自定义单元格类中的三个非静态标签的代码

  @IBOutlet  var posLabel: UILabel!
  @IBOutlet  var hrLabel: UILabel!
  @IBOutlet  var avgLabel: UILabel!

设置标签文字的代码

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as PlayerSelectTableViewCell

    let name = playerNames[indexPath.row]
    var hrs = Int(RosterStore.sharedInstance.get(name).stats["HR"]!)
    var avg = RosterStore.sharedInstance.get(name).stats["AVG"]!
    var avgString = "\(avg)" as NSString
    cell.hrLabel!.text = "\(hrs)"
    cell.posLabel!.text = RosterStore.sharedInstance.get(name).pos
    cell.avgLabel!.text = avgString.substringFromIndex(1)

    cell.textLabel!.text = name

    println(cell.hrLabel.text)
    return cell
}

请注意,我可以通过这种方式设置cell.textLabel并且它可以正常工作。如果有帮助,textLabel会突出显示为蓝色,而所有其他标签都会突出显示为绿色。

此处链接到github - https://github.com/klinskyc/OuttaHere 谢谢!

1 个答案:

答案 0 :(得分:2)

好的,谢谢你在github上发帖。我现在被覆盖了。问题出在这个声明中:

cell.textLabel!.text = name

您正在调用一个大小不受控制的文本标签。突出显示时它具有透明度。而是将另一个UILabel添加到PlayerSelectTableViewCell类。

代码:

import UIKit

class PlayerSelectTableViewCell: UITableViewCell {

    @IBOutlet  var posLabel: UILabel!
    @IBOutlet  var hrLabel: UILabel!
    @IBOutlet  var avgLabel: UILabel!

    @IBOutlet weak var nameLabel: UILabel!  //new code here
}

从该类中删除init和nib代码 - 不需要。

返回cellForRowAtIndexPath功能:

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as PlayerSelectTableViewCell

        let name = playerNames[indexPath.row]
        var hrs = Int(RosterStore.sharedInstance.get(name).stats["HR"]!)
        var avg = RosterStore.sharedInstance.get(name).stats["AVG"]!
        var avgString = "\(avg)" as NSString
        cell.hrLabel!.text = "\(hrs)"
        cell.posLabel!.text = RosterStore.sharedInstance.get(name).pos
        cell.avgLabel!.text = avgString.substringFromIndex(1)
        cell.nameLabel!.text = name  //new code here
                return cell
    }