使用 TableView 第一个单元格作为标题和问题
Posted
技术标签:
【中文标题】使用 TableView 第一个单元格作为标题和问题【英文标题】:Using TableView first cell as header and issues 【发布时间】:2015-11-02 07:11:16 【问题描述】:我使用 tableview 的第一个单元格作为标题,例如在cellForRowAtIndexPath
:
if indexPath.row == 0
cell.label.text = "Header"
else
// fill up the data
cell.label.text = array[indexPath.row]
在numberOfRowsInSection
我要返回这个:
return array.count
假设我的数组中有 20 个元素,我将第一个单元格保留为标题,因此其中一个元素将被删除。如果我增加了 array.count + 1
和 array[indexPath.row + 1]
来解决这个问题,那么我的数组就会越界。我只想使用第一个单元格作为标题,其余数据在接下来的 20 个单元格中。为什么这不能发生!
【问题讨论】:
【参考方案1】:我认为你的意思是使用array[indexPath.row - 1]
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
if indexPath.row > 0
let entry = array[indexPath.row - 1]
else
//Configure the placeholder cell
【讨论】:
【参考方案2】:你应该在你的数组中放置一个占位符作为标题,然后 array.count 将包含标题,并且可以使用indexPath.row
正确索引占位符,这样你就不会出现越界错误
否则,如果这不是一个选项,则在索引数组时必须破例,就像
//psuedo code
if (indexPath.row == 0)
return headerCell;
else
data = array[indexPath.row-1];
return normalCell;
【讨论】:
【参考方案3】:获取数据后,应为数据中的表头创建一个空对象。
[array insertObject:@"header" atIndex:0];
【讨论】:
【参考方案4】:恕我直言,获取数组的第一个元素、创建自定义标题视图并将其从数组中删除会更容易,因此您只需使用数组中的内容处理普通的“uitableviewcells”,而无需需要使用任何条件。有一个 'delegate' 可以设置 'uitableviewheader' ,这也应该是放置它的地方。
【讨论】:
【参考方案5】:你可以用两种方式来做到这一点
首先是
if (indexPath.row == 0 )
cell.textLabel.text = @"Header";
else
cell.textLabel.text = array[indexPath.row - 1];
NSLog(@"The cell index is - %@",array[indexPath.row - 1]);
其次是
if (indexPath.row > 0 )
cell.textLabel.text = array[indexPath.row - 1];
NSLog(@"The cell index is - %@",array[indexPath.row - 1]);
else
cell.textLabel.text = @"Header";
【讨论】:
以上是关于使用 TableView 第一个单元格作为标题和问题的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 的搜索栏与第一个 tableview 单元格重叠
Snapkit 和 TableView 中的多个自定义单元格
如何将uicollectionview单元格合并到tableview第一个单元格上
Javafx:TableView根据行列获取特定表格单元格的图形节点