2014-10-04 71 views
0

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

下面是一个带有界面构建器+实际行为截图的imgur。它定义自定义单元格类三无静电标签,设置标签文本

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这种方式和它的作品

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

代码http://imgur.com/a/5fO4H

代码。如果有帮助,textLabel将突出显示为蓝色,而其他所有标签都突出显示为绿色。

链接到github这里 - https://github.com/klinskyc/OuttaHere 谢谢!

+0

继续前进,发布您的代码 – 2014-10-04 00:42:36

+0

你有在Interface Builder中正确设置自定义类原型细胞的?您是否已将原型单元格中的标签连接到IBOutlets? – Paulw11 2014-10-04 00:55:29

+0

@ Paulw11我的自定义类已设置。 IBOutlet代码是从ctrl拖动标签自己到自定义类。我能够正确设置并获取标签值。他们只显示行被选中时显示。我希望它们始终显示(如默认的textLabel) – rockyroadster555 2014-10-04 00:59:36

回答

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和笔尖码 - 没有必要的。

回到你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 
    } 
+0

这将做到这一点。非常感谢! – rockyroadster555 2014-10-04 11:45:38

+0

花了我几个小时来弄清楚。谢谢。但是,我不太明白为什么这个代码有效。你能否给一个解释? – aejhyun 2015-12-21 12:46:46

相关问题