我有一个默认为空白的tableview。用户可以添加单元格。
我希望没有单元格时分隔线清晰,有单元格时灰色。
我正在使用此代码:
if ([[self.fetchedResultsController fetchedObjects] count] == 0)
{
self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.routineTableView.separatorColor = [UIColor clearColor];
}
else
{
self.routineTableView.separatorColor = [UIColor grayColor];
}
问题是,当我使用空白表启动应用程序时,如果我添加单元格,那么在我重新启动应用程序之前,灰色线条不存在。但是如果我从那里的单元格开始,然后删除它们,然后重新添加它们,就行了。有什么建议吗?
答案 0 :(得分:12)
也许你错过了这个?
...
else
{
self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
self.routineTableView.separatorColor = [UIColor grayColor];
}
编辑: 你需要这个但不仅如此...根据Apple文档:
此属性的值是
UITableViewCell
类引用类引用中描述的分隔符样式常量之一。UITableView
使用此属性在tableView:cellForRowAtIndexPath:
中委托返回的单元格上设置分隔符样式。
这意味着对于已经加载的单元格,样式不会改变。只需滚动表格以强制细胞重绘,就应该使分隔符出现......
然后你必须:
在插入单元格之前设置它
或者
tableView
使用NSFetchedResultsController
并不容易,您应该查看其delegate以获得解决方案...或更改方向,例如隐藏tableView
直到您有结果也许...
编辑2 :您也可以直接添加:
[self.tableView reloadData];
但这是一个肮脏的解决方法,只会重新加载完整的tableView,失去NSFetchedResultsController
的大部分好处......
答案 1 :(得分:1)
我通常做的快速修复是:
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ([tableView respondsToSelector:@selector(setSeparatorStyle:)]) {
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
}
}
答案 2 :(得分:1)
这会更改是否存在分隔符的布尔标志。把它放在viewDidLoad:
中self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
为了确保你真的让它消失,将seperatorColor属性设置为视图和单元格的背景颜色:
// If the background is white
self.tableView.separatorColor = [UIColor whiteColor];
那么即使以某种方式上面没有被调用并且分隔符仍然存在 - 它将与它背后的颜色相同,因此是不可见的。
祝你好运。