我有一个UITableViewController子类,在其中以如下数据填充UITableView:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("kundeCell") as! KundeCell
cell.selectionStyle = .None
let kunde = self.kundenAuszutragen[indexPath.row]
cell.delegate = self
cell.kunde = kunde
cell.allowsSwypeRight = (self.zahlungenImQuartalVonKunde[kunde] == nil) // Abkassieren
cell.allowsSwypeLeft = self.state == .Austragen // Austragen
cell.abkassierButton.titleAbkassierLabel.showsTextFilled = self.zahlungenImQuartalVonKunde[kunde] != nil
return cell
}
效果很好,看起来像这样:
上面的文本是UILabel,下面的文本来自UIButton(在两种情况下均为默认值)。右边的€符号是一个自定义UIButton,它带有一个自定义UILabel的子视图,该子视图显示带有笔触效果的€,这是自定义UIButton的相关代码,当按钮被激活时会被调用:
private func handleInit()
{
// titleAbkassierLabel is the custom UILabel with the stroke
self.titleAbkassierLabel = AbkassierLabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
self.titleAbkassierLabel.font = UIFont.systemFontOfSize(self.titleAbkassierLabelFontSize)
self.titleAbkassierLabel.text = self.titleText
self.titleAbkassierLabel.textColor = UIColor.clearColor()
self.titleAbkassierLabel.setNeedsDisplay()
self.addSubview(self.titleAbkassierLabel)
self.backgroundColor = UIColor.clearColor()
}
现在,当我设置要填充的单元格的€符号时,它看起来像这样:
然后在UIButton子类中调用以下代码:
self.titleAbkassierLabel.showsTextFilled = true
// which then again comes to: (in the titleAbkassierLabel - property)
var showsTextFilled: Bool = true {
didSet
{
self.setNeedsDisplay()
}
}
好的,此单元格已满€突出显示。但是,如果我然后向下滚动,其他单元格也会突出显示(当然,因为第一个单元格已被重用,为什么它会显示正确的文本(在左侧的标签中)而不显示正确的€符号?即使看起来与众不同也不会被突出显示:
(与其他单元格进行比较,€似乎更厚)
因此它看起来更厚,但是如果我查看ViewDebugger,我发现只有一个自定义按钮和一个自定义€-标签:
如果您需要更多信息,请发表评论。非常感谢,尽管有德国的 property 名称/等等,我希望您能理解问题!
编辑:我的细胞委托:
protocol AustragenAbkassierenDelegate
{
// Kunde bearbeiten
func setKundeAusgetragen(kunde: Kunde, animated: Bool) -> Bool
func setKundeAbkassiert(kunde: Kunde, createZahlung: Bool, endAction: (() -> Void)?) -> UIAlertController?
func getNextKundeAfterKunde(kunde: Kunde) -> Kunde?
func showKundeDetailVCWithKunde(kunde: Kunde)
func showAlertController(alert: UIAlertController!, completionHandler: (() -> Void)?)
}
但是我认为这与问题无关。只是在发生更改时通知委托(这里是TableViewController)。
最佳答案
尝试从单元格的prepareForReuse方法中重新构建titleAbkassierLabel。
关于ios - UITableView可重用的自定义单元格在 subview 中显示错误的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31491452/