在故事板中创build自定义UITableview部分标题的最佳方法

目前,我正在故事板中创build一个原型单元格,并使用此单元格作为部分标题。 在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. } 

原型单元格视图只允许您在故事板编辑器中devise单元格 ,而不是部分页眉和页脚。 您尝试使用UITableViewCell作为部分头部是一个聪明的黑客攻击,但它只是不被涉及的类支持 – UITableViewCell不是用于除了表视图单元格之外的任何东西。 它可能比视野消失或者没有被正确地布置好得多。 UIKit完全有权拒绝声明,删除所有应用程序的数据,吊销开发人员证书,或者放火烧房子。

如果你想让你的代码正常工作,你的select是在代码中创build你的节标题,或者把它们放在一个单独的XIB文件中。 我知道这不是你想要做的,但这些是你的select。

我有同样的问题,解决方法是返回单元格的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; } 

你得到和以前一样的自动布局结果,但没有消失。

我相信你可以使用UITableViewCell作为节头,因为UITableViewCell是UIView的子类,所以根据LSP

“程序中的对象应该可以replace其子类的实例,而不会改变该程序的正确性。”

在iOS 8中,这确实很简单。 只需devise您的标题,就像devise单元格一样。 一切都是一样的,你可以把自定义的类,不要忘记添加重用标识符。

当在代码中使用它时,只需在tableView:viewForHeaderInSection方法中返回该单元格tableView:viewForHeaderInSection

如果要使用fix height或tableView:estimatedHeightForHeaderInSection则不要忘记实现tableView:heightForHeaderInSection如果高度取决于单元的内在大小。