UITableView分隔符样式问题

时间:2011-06-03 22:59:11

标签: iphone objective-c uitableview

我有一个默认为空白的tableview。用户可以添加单元格。

我希望没有单元格时分隔线清晰,有单元格时灰色。

我正在使用此代码:

if ([[self.fetchedResultsController fetchedObjects] count] == 0)
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.routineTableView.separatorColor = [UIColor clearColor];
}
else
{
    self.routineTableView.separatorColor = [UIColor grayColor];
}

问题是,当我使用空白表启动应用程序时,如果我添加单元格,那么在我重新启动应用程序之前,灰色线条不存在。但是如果我从那里的单元格开始,然后删除它们,然后重新添加它们,就行了。有什么建议吗?

3 个答案:

答案 0 :(得分:12)

也许你错过了这个?

...
else
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
    self.routineTableView.separatorColor = [UIColor grayColor];
}

编辑: 你需要这个但不仅如此...根据Apple文档:

  

此属性的值是UITableViewCell类引用类引用中描述的分隔符样式常量之一。 UITableView使用此属性在tableView:cellForRowAtIndexPath:中委托返回的单元格上设置分隔符样式。

这意味着对于已经加载的单元格,样式不会改变。只需滚动表格以强制细胞重绘,就应该使分隔符出现......

然后你必须:

  1. 在插入单元格之前设置它

    或者

  2. 在添加第一个单元格时重新加载tableView
  3. 使用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];

那么即使以某种方式上面没有被调用并且分隔符仍然存在 - 它将与它背后的颜色相同,因此是不可见的。

祝你好运。