几乎在一周内我试图找出如何将静态/自定义tableviewcell附加到动态生成的tableview。我根据从数据库中获取的数据来填充单元格。基本上我想要完成的是像appDojo应用程序中的以下图片:
您可能知道并看到,您可以使用ClassDojo应用添加任意数量的组,但最新的单元格(在本例中为 Voeg een nieuwe klas toe )将始终保持在tableview的底部。这正是我想要做的。
到目前为止我试图做的是尝试计算tableview中的最新单元格并尝试附加我的自定义单元格,但不幸的是我无法理解它。
如果有人可以帮我解决这个问题,我真的很感激。
提前致谢。
如果您需要任何代码,请告诉我。
---------编辑后的帖子---------
由于@Slayter,我确实完成了分配我的自定义单元格,但现在我面临的问题是我的自定义单元格被我动态创建的单元格(使用Alamofire)立即覆盖。
任何帮助都将不胜感激。
答案 0 :(得分:1)
这很简单。您只需告诉tableView预期还有一个单元格而不是数据源中的单元格。
示例强>
在numberOfRowsInSection
方法中,您将拥有以下内容:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myData.count + 1 // Add one for your custom cell
}
然后在cellForRowAtIndexPath
方法中,您只需为indexPath
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
if indexPath.row < myData.count {
// configure cell as normal
} else {
// Add your custom cell logic here
}
return cell
}
答案 1 :(得分:1)
ClassDojo iOS工程师在这里!非常乐意分享我们如何做到这一点。
与提到的Slayter一样,我们
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myData.count + 1 // Add one for your custom cell
}
但此外我们还会做以下事情:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = nil;
if self.indexIsForCustomCell(indexPath) {
cell = tableView.dequeueReusableCellWithIdentifier(CustomCell.reuseIdentifier)
// Additional configuration
} else {
cell = tableView.dequeueReusableCellWithIdentifier(RegularCell.reuseIdentifier)
// Additional configuration
}
return cell
}
CustomCell看起来像这样(不完全):
class CustomCell: UITableViewCell {
static let reuseIdentifier = "CustomCell"
// More code
}
常规单元格如下:
class RegularCell: UITableViewCell {
static let reuseIdentifier = "RegularCell"
// More code
}
动态单元格被覆盖的原因是由于行
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
请注意,无论是自定义单元格还是常规单元格,您都使用相同的cellIdentifier
。这意味着您很可能正在执行以下操作:
self.tableView.registerClass(RegularCell.class, forIdentifier: "new group")
self.tableView.registerClass(CustomCell.class, forIdentifier: "new group")
当你应该做的时候:
self.tableView.registerClass(RegularCell.class, forIdentifier: RegularCell.reuseIdentifier)
self.tableView.registerClass(CustomCell.class, forIdentifier: CustomCell.reuseIdentifier)
OR
self.tableView.registerClass(RegularCell.class, forIdentifier: "regularCellReuseIdentifier")
self.tableView.registerClass(CustomCell.class, forIdentifier: "customCellReuseIdentifier")
通过使用相同的标识符键,您告诉UITableView
将两个单元格视为相同的类型。因此,当需要为屏幕上绘制的新单元格回收内存时,它将交替使用RegularCell
和CustomCell
。
希望这有帮助,并感谢您查看我们的应用程序!
================= 编辑 =================
意识到我忘了添加indexIsForCustomCell
方法。这是:
func indexIsForCustomCell(indexPath : NSIndexPath) -> Bool {
if self.myData.count > 0 {
return indexPath.section == 0 && indexPath.row == (self.myData.count+1)
}
return indexPath.section == 0 && indexPath.row == 0
}