【问题标题】:Custom UITableView cell Nib file only shows up after select cell?自定义 UITableView 单元格 Nib 文件仅在选择单元格后显示?
【发布时间】:2016-01-07 18:38:19
【问题描述】:

当我加载我的应用程序this is what happens. 时,由于某种原因,表格视图加载为空白。只有当我选择单元格并单击另一个单元格时,才会显示先前选择的单元格。但是对于第一个单元格,无论我在哪里/如何单击,我仍然看不到第一个单元格。

我不明白为什么会发生这种情况,因为我关注了this tutorial. 显然我做错了,如果有人能告诉我为什么会发生这种情况以及如何解决它,我将不胜感激。

在主情节提要中,我使用tableViewController SummaryTableViewController 和自定义UITableViewCell DayOfWeekTableViewCell。我有一个名为DayofWeekSpendingTableViewCell.xib 的表格视图单元格的笔尖文件。 Here's a list of all my files and their fileneames.

这是我的SummaryTableViewController 代码:

class SummaryTableViewController: UITableViewController {
    var dayOfWeek: [String] = [String]()
    var totalSpentPerDay: [Double] = [Double]()

    override func viewDidLoad() {
        super.viewDidLoad()

        dayOfWeek = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
        totalSpentPerDay = [0, 7.27, 0, 0, 39, 0, 0]
    }

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

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

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

        // Configure the cell...
        let nib = NSBundle.mainBundle().loadNibNamed("DayofWeekSpendingTableViewCell", owner: self, options: nil)
        cell = nib[0] as! DayOfWeekTableViewCell

        cell.dayOfWeek.text = dayOfWeek[indexPath.row]
        cell.totalAmountSpent.text = String(totalSpentPerDay[indexPath.row])

        return cell
    }
}

这是我的自定义单元格DayOfWeekTableViewCell 代码:

class DayOfWeekTableViewCell: UITableViewCell {

    @IBOutlet weak var dayOfWeek: UILabel!
    @IBOutlet weak var totalAmountSpent: UILabel!

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

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

}

在主情节提要中,我...

在笔尖文件DayofWeekSpendingTableViewCell.xib我已经...

【问题讨论】:

  • 能贴出didSelectRowAtIndexPath: 的代码吗?
  • 为什么你没有在你的代码中检查 cell == nil ?为什么定义两个单元格(xib 中的 1 个和故事板中的 1 个)?为什么你没有注册 xib 以便在 tableview 中使用它?
  • 把你的代码放到viewDidLoad中

标签: ios swift uitableview uinib


【解决方案1】:

不是在 cellForRowAtIndexPath 中加载 NIB,而是在 viewDidLoad() 中加载 NIB 并注册它以用于您的表视图

override func viewDidLoad() {
    super.viewDidLoad()

    dayOfWeek = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    totalSpentPerDay = [0, 7.27, 0, 0, 39, 0, 0]
    // Create a nib for reusing
    let nib = UINib(nibName: "DayofWeekSpendingTableViewCell", bundle: nil)
    tableView.registerNib(nib, forCellReuseIdentifier: "summaryCell")
}

然后你可以直接访问 cellForRowAtIndexPath 中的单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // Configure the cell...
    let cell = tableView.dequeueReusableCellWithIdentifier("summaryCell", forIndexPath: indexPath) as! DayOfWeekTableViewCell
    cell.dayOfWeek.text = dayOfWeek[indexPath.row]
    cell.totalAmountSpent.text = String(totalSpentPerDay[indexPath.row])

    return cell
}

【讨论】:

  • 您可能想要删除第一个var cell = ...,在一次调用cellForRowAtIndexPath 中两次出队会导致奇怪的行为,更不用说由于重新定义了单元格而无法编译: p
  • 确实,你是对的,我会删除这个错字!谢谢
  • 我遇到了问题,但正如 Alex Popov 指出的那样,我在出列单元格时需要小心。我有冲突的出队。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多