表格视图显示空单元格
Posted
技术标签:
【中文标题】表格视图显示空单元格【英文标题】:Table view is showing empty cells 【发布时间】:2015-09-23 01:07:17 【问题描述】:我有 2 个部分,第一个有 1 行,第二个有 4 行。我可以在故事板中看到开关、标签和文本字段。它在模拟器中加载空白。我检查了所有的 IBOutlets 都已连接。
以下是我在 Table View Controller 中的代码
import UIKit
class InfoTableViewController: UITableViewController
var sectionArray: NSMutableArray = ["Social Security Benefits", "Demographics"]
var socialArray: NSMutableArray = ["Estimate Social Security Benefits"]
var demoArray: NSMutableArray = ["Name:", "DOB:", "Age of Retirement:", "Years of Retirement"]
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return self.sectionArray.count
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if section == 0
return socialArray.count
else
return demoArray.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
if indexPath.section == 0
if indexPath.row == 0
println(indexPath.section)
println(indexPath.row)
let cell: SocialTableCell = SocialTableCell(style: UITableViewCellStyle.Default, reuseIdentifier: "social")
cell.social?.text = "Estimate"
cell.toggle?.setOn(false, animated: true)
return cell
else if indexPath.section == 1
if indexPath.row == 0
println(indexPath.section)
println(indexPath.row)
let cell: NameTableCell = NameTableCell(style: UITableViewCellStyle.Default, reuseIdentifier: "name")
return cell
else if indexPath.row == 1
println(indexPath.section)
println(indexPath.row)
let cell: DOBTableCell = DOBTableCell(style: UITableViewCellStyle.Default, reuseIdentifier: "DOB")
else if indexPath.row == 2
println(indexPath.section)
println(indexPath.row)
let cell: RetirementTableCell = RetirementTableCell(style: UITableViewCellStyle.Default, reuseIdentifier: "AgeOfRetirement")
else if indexPath.row == 3
println(indexPath.section)
println(indexPath.row)
let cell: YearsRetirementTableCell = YearsRetirementTableCell(style: UITableViewCellStyle.Default, reuseIdentifier: "YearsOfRetirement")
return UITableViewCell()
//cell.configureFlatCellWithColor(UIColor.greenSeaColor(), selectedColor: UIColor.cloudsColor(), roundingCorners: UIRectCorner())
我还为每个单元格创建了 5 个表格视图单元格类。我还检查了所有标识符,它们是正确的。
下面是我的故事板图片
但是当我运行它时,模拟器只显示部分并且单元格是空的。
任何帮助将不胜感激。 谢谢
【问题讨论】:
你设置了委托和数据源吗? 我用的是tableviewcontroller而不是tableview的view controller,它是自动设置的! 您需要阅读“表格视图编程指南”并了解如何正确实现您的cellForRowAtIndexPath
方法。您没有正确地将单元格出列,并且没有尝试将数据放入单元格中。这就是为什么它们是空白的。
我知道我没有设置较低的单元格,但我设置了社交单元格并且它不起作用。当第一个不工作时,我不想浪费时间设置那些。
确保cell.social
和cell.toggle
不是nil
。
【参考方案1】:
您可以使用静态单元格来做到这一点。
-
转到您的表格视图 => 属性检查器 => 在内容中选择静态单元格,然后在部分中放入 2(因为您有 2 个部分)
-
然后单击 Storyboad Hierarchy 中的一个部分 => 属性检查器 => 在每个部分中放置您想要的行数(放置 1,因为您在第一部分中有一行)。再次选择另一个部分并放置您想要的行数想要(放 4,因为你在第二部分有 4 行)
然后单击每一行单元格并添加标签并输入您的标签名称。您也可以为游览第一部分放置切换按钮。
创建一个新的 cocoa touch 类:- 类看起来像这样(你应该评论或删除这些函数,
// MARK: - Table view data source
/*
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return 2
*/
/*
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell
// Configure the cell...
return cell
*/
最后 Table 类看起来像这样,
import UIKit
class TableViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
【讨论】:
如果我这样做,我将无法更改单元格的外观,如圆边或不同颜色的部分。我还没有看过它,但是我将如何看待使用输入中的数字来计算不同选项卡的答案。 您可以添加图像或标签以使用不同的颜色部分,试试这个!!【参考方案2】:这就是您的cellForRowAtIndexPath:
的样子。以下是您的第一部分第一行的示例,您可以相应地对齐所有其他部分。
作为旁注,请注意,除了您的第一部分第一行之外,对于所有其他表格行,您都没有设置任何标签等,并且该控件最终到达语句 return UITableViewCell()
导致空单元格。请仔细检查。
if indexPath.row == 0
println(indexPath.section)
println(indexPath.row)
let socialCellId: NSString = "social"
var cell: SocialTableCell = tableView.dequeueReusableCellWithIdentifier(socialCellId) as SocialTableCell
if cell == nil
cell = SocialTableCell(style: UITableViewCellStyle.Default, reuseIdentifier:socialCellId)
cell.social?.text = "Estimate"
cell.toggle?.setOn(false, animated: true)
return cell
【讨论】:
我尝试了解决方案,两件事。单元格不能与 nil 进行比较,因为单元格的类型是 secTableViewCell 而不是 secTableViewCell? (可选SocialTableCell
,例如在您的初始渲染中可能返回nil
。您可以设置一个断点并检查。对于第二个,这是我这边的错字,现在更正了:)。 @Dereck
我再次尝试了第一个点并做了断点并检查但 Xcode 不断给我错误“二进制运算符'=='不能应用于'uitableviewcell'和'nil'类型的操作数"【参考方案3】:
我遇到了完全相同的问题,上面的 cmets 都没有帮助我。我终于弄明白了,也许你也有同样的问题。
对我来说,我不小心在设计器中复制并粘贴了第二个表格视图。第二个表视图位于第一个表视图之上,但只有第一个表视图连接到我的 TableViewController,因此从未创建运行时可见的单元格,因此为空白。
检查一下,希望对您有所帮助。
Double TableView
【讨论】:
以上是关于表格视图显示空单元格的主要内容,如果未能解决你的问题,请参考以下文章