【发布时间】:2013-11-28 14:03:14
【问题描述】:
我有一个表视图控制器,我drag-and-drop an additional UIView on a storyboard to make a header,它变成了UITableView的子视图。
我不将其作为viewForHeaderInSection: 和朋友的“官方”部分标题(我将解释原因),它只是表格视图的子视图,它显示在顶部表,以及内部表视图包装器和视图层次结构中的刷新控制视图。
层次结构如下所示:
UITableView 0,0 320x455
UIRefreshControl 0,0 320x60
UITableViewWrapperView 0,0 320x455
cell 0,190 320x44
cell 0,146 320x44
cell 0,102 320x44
cell 0, 58 320x44
custom UIView 0,0 320x58
现在,标题视图运行良好......直到我想调整它的大小。这个想法是,标题视图有一个文本字段,当获得焦点时,会导致其他表单字段在其下方展开,从而将表格单元格向下推。
问题是我几乎无法控制单元格的布局。在调整自定义视图的大小(通过更改其框架)时,它会覆盖表格包装器视图。
那么,我为什么不把它变成一个节标题视图并通过heightForHeaderInSection: 调整它的大小呢?问题是,当一个文本字段被聚焦或输入时,我需要调用[self.tableView reloadData] 来刷新表中的数据(搜索时键入的东西),这也会重新加载标题并制作文本字段失去焦点。
总结一下,
- 如何实际制作可以动态调整大小和下推表格单元格的表格标题?
- 如何在重新加载表格时保持表格标题内的文本视图的焦点?
【问题讨论】:
-
试试这种方式怎么样 - 给你的表格两个部分,第一部分只有一个单元格,那个单元格将是你的“标题”。当您需要重新加载时,请使用 reloadSections: 仅重新加载第 1 节,这样您的“标题”就不会重新加载。
-
@rdelmar 我接受了这个想法。 另一件事 我没有提到的是,我有一个基本控制器类正在被其他类似视图使用,我必须将它重构为 2 节表视图,所以我避免了这种情况.
-
@rdelmar 我刚刚意识到这也行不通,因为我需要重新加载顶部以使标题高度更改生效,这当然会破坏 UITextField 焦点...
-
你想让这个标题成为表格的子视图吗?您可以使用 UIView 控制器,并让此视图位于表格视图之外,还是这不适用于您的基本控制器设置?
-
@rdelmar 我对结构并不太在意,只要它符合我的要求。但是,我找到了一个更简单的解决方案(见答案)。
标签: ios objective-c uitableview