很奇怪cell.detailTextLabel!.text没有正确显示(仅在选择后显示)

时间:2015-07-29 04:59:33

标签: ios swift uitableview cell

我将tableview设置为Subtitle并设置tableview单元格如下:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as! UITableViewCell

    var row = indexPath.row
    var section = indexPath.section

    if (subtitleExist) {
        cell.textLabel!.text = myTitle
        cell.detailTextLabel!.text = mySubtitle
    }else{
        cell.textLabel!.text = myAnotherTitle
        cell.detailTextLabel!.text = ""
    }
}

然后当我第一次滚动时,结果出现了,没有一些(随机?)单元格的副标题:

no subtitle for some cell

在我触摸细胞后,它会出现:

appears after touch it

那我怎么解决呢?谢谢!

修改

这是我的完整测试代码:

import UIKit

class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var myTableView: UITableView!

    var data : [String]!

    override func viewDidLoad() {
        super.viewDidLoad()

        data = []
        data.append("I")
        data.append("WILL")
        data.append("APPEND")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("LOTS")
        data.append("OF")
        data.append("DATA")
        data.append("HERE")
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("CellSubtitle") as? UITableViewCell

        if (cell == nil) {
            cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "CellSubtitle")
        }

        var row = indexPath.row

        cell!.detailTextLabel!.text = ""

        if (row >= 7) {
            cell!.textLabel!.text = data[indexPath.row]
            cell!.detailTextLabel!.text = "My Subtitle Text"
        }else{
            cell!.textLabel!.text = data[indexPath.row]
        }

        return cell!
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

2 个答案:

答案 0 :(得分:0)

如果要继续手动初始化单元格,可以使用以下出列方法代替。然后,就初始化detailTextLabel而言,你不必这样做。它已内置到单元格中,并且通过指定单元格的样式应为副标题,将为您设置该标签。

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("CellSubtitle") as? UITableViewCell

    var row = indexPath.row
    var section = indexPath.section

    cell.detailTextLabel!.text = ""

    if (subtitleExist) {

        cell.textLabel!.text = myTitle

        if(mySubtitle.length > 0)
        {
             cell.detailTextLabel!.text = mySubtitle
        }

    } else {

        cell.textLabel!.text = rowText           
    }
}

答案 1 :(得分:0)

问题似乎与细胞的可重用性有关。请尝试以下步骤:

  1. 转到故事板
  2. 选择TableView
  3. 属性检查器标签
  4. $(document).ready(function() { if ($(.test).is(":selected")) { $(".test1").prop("disabled", false); } else { $(".test1").prop("disabled", true); } } 更改为0,然后重置为1.
  5. 保存并运行
  6. 看看这是否能解决您的问题。