当前我正在故事板中创建原型单元格并将此单元格用作节标题。 在tableView:viewForHeaderInSection:方法中,我将单元格出列并返回它。
我的节标题单元格中有一个UITextField和一个UIButton。 当我点击文本字段时会出现键盘,但只要焦点从文本字段移开,整个部分标题就会消失。 当我直接将单元格作为节标题视图返回时会发生这种情况,但是如果我将新分配的UIView作为节标题视图返回到哪个单元格作为子视图添加,那么除了自动调整掩码外,一切正常。
为什么标题会消失?
我不确定这里最好的东西是什么。
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
static NSString *CellIdentifier = @"SectionHeader";
SettingsTableViewCell *sectionHeaderCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//return sectionHeaderCell; // returning cell directly, section header disappears when focus is moved away from text field.
UIView * headerView = [[UIView alloc] initWithFrame:sectionHeaderCell.frame];
[headerView addSubView:sectionHeaderCell];
return sectionHeaderCell;//header view never disappears, but auto resizing masks do not work. Need to know how to set autoresizing masks to headerView so that it resizes correctly.
}
答案 0 :(得分:21)
原型单元格表视图只允许您在情节提要编辑器中设计单元格,而不是节页眉和页脚。您尝试使用UITableViewCell
作为节标题是一个聪明的黑客,但它只是不受所涉及的类支持 - UITableViewCell
并非旨在用于除表之外的任何其他内容查看单元格。它可能比视图消失或没有正确布局更糟糕; UIKit将完全有权通过断言,删除所有应用程序的数据,撤销您的开发人员证书或让您的房子着火。
如果您希望代码正常运行,您可以选择在代码中创建节标题或将它们放在单独的XIB文件中。我知道那不是你想做的,但这些都是你的选择。
答案 1 :(得分:8)
我遇到了同样的问题,修复方法是返回单元格的contentView
,如:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
static NSString *CellIdentifier = @"SectionHeader";
SettingsTableViewCell *sectionHeaderCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
sectionHeaderCell.myPrettyLabel.text = @"Greetings";
sectionHeaderCell.contentView.backgroundColor = [UIColor whiteColor]; // don't leave this transparent
return sectionHeaderCell.contentView;
}
你得到的结果和以前一样,但没有消失。
答案 2 :(得分:2)
我确信你可以使用UITableViewCell作为节头,因为UITableViewCell是UIView的子类,所以根据LSP
“程序中的对象应该可以用它们的实例替换 子类型没有改变该程序的正确性。“
答案 3 :(得分:2)
在iOS 8中,它非常简单。只需按照设计单元格的方式设计标题即可。一切都是一样的,你可以把自定义类放在一起,不要忘记添加重用标识符。
在代码中使用它时,只需在tableView:viewForHeaderInSection
方法中返回该单元格。
如果您想使用修正高度,请不要忘记实施tableView:heightForHeaderInSection
;如果高度取决于单元格的内在尺寸,请不要忘记tableView:estimatedHeightForHeaderInSection
。