UITableView分隔符样式问题

6 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];
}
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*rci 13

也许你错过了这个?

...
else
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
    self.routineTableView.separatorColor = [UIColor grayColor];
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

然后你必须:

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

    要么

  2. tableView添加第一个单元格时重新加载

这对于一个不容易做的事情NSFetchedResultsController,你应该调查它的代表解决方案...或改变方向,就像隐藏tableView直到你得到一个结果...


编辑2:你也可以简单地添加:

[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

但这是一个肮脏的解决方法,只会重新加载完整的tableView,失去了NSFetchedResultsController...的大部分好处...