我的UITableView
没有显示任何数据。我认为问题在于:
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell?`
这是我的代码:
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
// Configure the cell...
let cellId: NSString = "Cell"
var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell
if let ip = indexPath {
//var data: NSManagedObject = myList[ip.row] as NSManagedObject
//cell.textLabel.text = data.valueForKey("name") as String
cell.textLabel.text = "Hi"
}
return cell
}
我在youtube上看过使用此代码的教程,但我无法让它工作。
首先我讨论了我的阵列存在问题,但是当我把文字放入其中时它仍然没有显示任何内容。
我正在运行 Xcode6 beta 3 ,但此代码在 beta 2 中运行得非常好。
我没有任何警告或错误消息。
编辑:我查看了其他一些 Swift 项目,我在那里得到了相同的功能,并且它在2周前工作但是现在它也没有'工作。也许这是 Xcode6 beta 3 问题?
我的课程类型为UITableViewController
。
编辑:我正在浏览Apple开发人员论坛并在更新到xCode 6 beta 3后看到相关问题,因此xCode 6 beta 3可能存在问题!
编辑:该方法无法调用。
答案 0 :(得分:41)
知道了!
有同样的问题 - 我还在uiviewcontroller中添加了一个tableview,它也没有用,但我现在知道这个问题了。
如果在界面构建器上添加tableview并在“Add Missing Constraints”之后单击,则会添加无法一起使用的约束。
在我的位置,我在整个uiview上都有了tableview,点击“添加缺失约束”后,它会在这里添加:
现在,如果您删除其中一个尾随或前导对齐,它将起作用 - cellforrowatindexPath将被调用!不知道为什么会这样,但它会起作用。
希望我能帮助你。
答案 1 :(得分:11)
您需要实现此功能,否则永远不会调用cellForRowAtIndexPath
:
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
// Return the count of the number of rows in the table
return 5
}
5
当然只是一个例子。您将返回数组中元素数量的计数。
答案 2 :(得分:1)
似乎没有解决方案。返回xCode 6 beta 2修复了这个问题。希望并且可能会在Beta 4中修补。
答案 3 :(得分:1)
可能会对你有帮助。
我有以下内容:
self.myTableView.rowHeight = 60
在函数heightForHeaderInSection中:返回60
不调用cellForRowAtIndexPath
如果在heightForHeaderInSection中返回值> gt = = 60,则不会调用cellForRowAtIndexPath。
即使当我设置self.myTableView.rowHeight = 59(或59或58),如果我在heightForHeaderInSection返回一个值> = 60所述的cellForRowAtIndexPath不叫
因此,我在函数heightForHeaderInSection中返回一个值< = 59,然后调用cellForRowAtIndexPath。 (使用cellForRowAtIndexPath中的断点来检查)。
另一个问题:如果调用了cellForRowAtIndexPath但你没有看到tableView的行:这是因为你的tableView的高度太短。
例如: (在这种情况下,titulo_tabla是我在桌子上方的UILabel.aOrdenes是一个NSArray,我可以从中获得我显示的行数。)
var width = self.view.frame.size.width
var height = self.view.frame.size.height
...
myTableView.frame = CGRectMake(width * 0.03, titulo_tabla.frame.origin.y + titulo_tabla.frame.height, width - 2 * (width * 0.03), 60.0 * CGFloat(aOrdenes.count) + 50)
在最后一个代码,最后一个参数...,60.0 * CGFloat的(aOrdenes.count)+ 50)60是rowHeight的(self.myTableView.rowHeight = 60)和50在功能heightForHeaderInSection返回的值。这样就显示了你的tableView行。
答案 4 :(得分:1)
XCode版本6.3.1(6D1002)我刚遇到这个问题,在我的情况下,我复制UITableViewController并在某处导致重复使用导致此问题。
我的解决方案是
与数据源btw没什么关系,你可以简单地将一些foo内容添加到单元格中的某个标签上以分离问题。
HTH
答案 5 :(得分:1)
也许您已在 init :
中声明了委托preg_quote()
}
应该在 ViewDidload :
中调用它-(instancetype)init{
self = [super init];
if(self){
_tableView.delegate = self;
,...
}
return self;
,... }
答案 6 :(得分:0)
您必须确保正确分配数据源并使用正确的方法签名。你宣布一些选项错误。
func tableView(tableView: UITableView!,
cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { }
答案 7 :(得分:0)
当我将Xcode 8.2.1中开发的旧Swift 2.3代码迁移到Xcode 8.3中的Swift 3.0时,我遇到了同样令人沮丧的问题,对于我来说,numberOfRows被称为
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
但主要的数据源方法永远不会被调用,
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
主要问题是我通过Swift代码创建的UITableView没有被添加到任何视图中,它被添加但后来被另一个视图替换,因此从未调用过数据源方法。希望它可以帮到某人。
答案 8 :(得分:0)
override func tableView(_ tableView: UITableView!,
cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { }
我缺少下划线作为第一个参数tableView。
它可能还需要覆盖。如果覆盖有效,您将知道是否正确描述了功能。
答案 9 :(得分:0)
检查是否有以下几行:
tableView.delegate = self
tableView.dataSource = self
如果未实现dataSource = self
,则可能是未调用cellForRowAt indexPath
方法的原因
答案 10 :(得分:0)
确保您具有UITableView对象的设置委托和数据源属性。
答案 11 :(得分:0)
您需要在 tableview
中将 viewDidLoad
设置为编辑模式
tableView.setEditing(true, animated: true)
答案 12 :(得分:-1)
您需要为表格视图设置高度限制。您可以在情节提要中设置或以编程方式设置。如果需要,我将发布一个正在运行的示例。
答案 13 :(得分:-3)
我在UITableView上也遇到了这个问题,我还设置了数据源并委托给了表视图,但是没有调用我的cellForRowAtIndexPath
方法。
<强>解决方案:强>
我的网络阻止了我的方法(使用防火墙)。我问我的网络管理员,我获得了对网络的完全访问权限,然后调用了我的cellForRowIndexPath
方法。
当我的回复来自网络服务时,由于网络阻止响应是黑色的,因此未调用cellForRowIndexPath
方法。