UITableView可重复使用的自定义单元格在子视图中显示错误的内容

时间:2015-07-18 13:04:38

标签: ios swift uitableview cocoa-touch

我有一个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
}

这很好用,看起来像这样: iOS Simulator with App running

上部文本是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()
}

现在,当我设置要填充的单元格的€符号时,它看起来像这样:my custom UITableViewCell with the € sign filled

然后在UIButton子类中调用以下代码:

self.titleAbkassierLabel.showsTextFilled = true

// which then again comes to: (in the titleAbkassierLabel - property)
var showsTextFilled: Bool = true {  
    didSet
    {
        self.setNeedsDisplay()
    }
}

好吧,这个单元格被填充了“突出显示”。但是,如果我向下滚动,其他单元格也会被突出显示(当然因为第一个单元格被重用,为什么它显示正确的文本(在左边的标签中)而不是正确的符号?即使与其他人看起来不同,也要突出显示: compare it to the other cell, the € seems to be thicker (将其与其他单元格进行比较,€似乎更厚)

所以它看起来更厚,但如果我查看ViewDebugger,我看到只有一个自定义按钮和一个自定义€ - 标签: enter image description here

如果您需要更多信息,请发表评论。非常感谢你,我希望你能理解这个问题,尽管有德国的房产名称等等!

编辑:我的小组代表:

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)。

1 个答案:

答案 0 :(得分:1)

尝试在您的单元格的prepareForReuse方法中从头开始重建titleAbkassierLabel。