自定义 UITableView 部分标题视图正在破坏
Posted
技术标签:
【中文标题】自定义 UITableView 部分标题视图正在破坏【英文标题】:Custom UITableView section header views are breaking 【发布时间】:2009-07-21 23:10:39 【问题描述】:我有一个自定义 UIView 子类,我正在尝试将其用作我的分组 tableview 部分之一的标题。我在 tableViewController 中保存了该视图的一个实例,并使用它来返回标题部分的高度以及视图本身。问题是,在 reloadData 调用过程中,该实例变量以某种方式从 UIView 更改为 CALayer,这会导致崩溃,因为该实例具有返回其预期高度的特殊方法。这是崩溃的代码:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
if (section == 0)
return [self.dataHeader frameHeight];
return 0.0f;
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
if (section == 0)
return self.dataHeader;
return nil;
我在heightForHeaderInSection方法的if块中第一次返回时设置了一个断点,它命中了4次;前三个成功返回 dataHeader ,而第四次显示它是一个 CALayer 并因 dosNotRecognizeSelector 异常而崩溃(如果这有所不同,我的 tableview 有 2 个部分)。发生这种情况有什么原因吗?有没有办法阻止它?
【问题讨论】:
【参考方案1】:dataHeader 的初始化代码是什么样的?初始化dataHeader时,是否正确保留?
我的猜测是你的 dataHeader 视图在你想要的之前被释放了。
【讨论】:
你是对的;那是个问题。实际上,我从重构中留下了一个自动释放。我明天有机会试试,看看能不能解决它:)。【参考方案2】:问题似乎是您有 2 个部分,而应用程序认为有 4 个部分。这是我调试此问题的方法:
1) numberOfSectionsInTableView 返回什么(是否实现)?
我假设每个标题方法都应该被调用 n 次,其中 n 是表中的节数。我还假设该应用程序询问上述代表 n 是什么。
2) 每次调用这些委托时,section 的值是多少?
每个部分应该只有一个调用,除非我遗漏了什么,如果委托被多次调用并使用相同的部分值,我会感到惊讶。
【讨论】:
以上是关于自定义 UITableView 部分标题视图正在破坏的主要内容,如果未能解决你的问题,请参考以下文章