Ios 滑动删除单元格会导致tableViewHeader随单元格一起移动
我在iOS 8中的Ios 滑动删除单元格会导致tableViewHeader随单元格一起移动,ios,objective-c,uitableview,ios8,Ios,Objective C,Uitableview,Ios8,我在iOS 8中的UITableView上遇到了一个奇怪的错误,我的tableViewHeader。当滑动单元格以显示删除按钮(标准iOS滑动以删除)时,它会将tableViewHeader与正在滑动的单元格一起移动。当我滑动单元格时,表头的移动方式与正在滑动的单元格相同。表视图中没有其他单元格被移动,只有标题和正在移动的单元格。我已经在iOS 7上测试过了,但没有遇到这个问题。在我看来,这似乎是iOS 8中tableViewHeader的一个bug,因为它只出现在这个版本中,而且似乎永远不会出
UITableView
上遇到了一个奇怪的错误,我的tableViewHeader
。当滑动单元格以显示删除按钮(标准iOS滑动以删除)时,它会将tableViewHeader
与正在滑动的单元格一起移动。当我滑动单元格时,表头的移动方式与正在滑动的单元格相同。表视图中没有其他单元格被移动,只有标题和正在移动的单元格。我已经在iOS 7上测试过了,但没有遇到这个问题。在我看来,这似乎是iOS 8中tableViewHeader
的一个bug,因为它只出现在这个版本中,而且似乎永远不会出现。我看不出有任何理由将标题包含在滑动删除中
下面只是一个模型。应用程序中的“滑动删除”是默认的iOS,没有自定义设置
尝试实现此方法,并为检查刷卡提供适当的条件。如果在标题视图中调用此方法
1.tableView:EditingStyleforRowatineIndexPath:2.tableView:TitleForDeleteConfirmationButtonFrrowatineXPath:3.tableView:HealdIndentWheedingRowatineIndexPath:这是由于我使用UITableViewCell作为表头而导致的。为了解决刷卡问题,我不使用
tableView.tableHeaderView=cell
,而是使用以下方法:
UIView *cellView = [[UIView alloc] init];
[cellView addSubview:cell];
tableView.tableHeaderView = cellView
我不知道这为什么能解决这个问题,特别是它在iOS 7上工作,但它似乎能解决这个问题
确保将所有视图添加到单元格视图中,就像添加到单元格内容视图中一样,否则按钮将不会响应
作品:
[单元格添加子视图:视图]代码>或[自添加子视图:视图]代码>
不起作用:
[cell.contentView addSubview:view]
或[self.contentView addSubview:view]
基于ferris的答案,我发现使用UITableViewCell作为节头时,最简单的方法是在viewForHeaderInSection中返回单元格的contentView。代码如下:
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell : cellSectionHeader = tableView.dequeueReusableCellWithIdentifier("SectionHeader") as cellSectionHeader
return cell.contentView
//cellSectionHeader is my subclassed UITableViewCell
}
避免标题随单元格移动的方法是在viewForHeaderInSection中返回单元格的contentView。如果您有一个名为SectionHeaderTableViewCell的子类UITableViewCell,这是正确的代码:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
SectionHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionHeader"];
//Do stuff to configure your cell
return cell.contentView;
}
除了Brad的答案外,Victor的背景色丢失问题通过以下方式得到解决:
cell.backgroundColor = UIColor.cyanColor()
致:
.contentView方法没有提到的一个问题是,如果表视图单元格使用LayoutSubView,则可能无法获得所需的行为,因为不会调用LayoutSubView。最后,我创建了一个完全独立的UIView子类,该子类支持普通单元格操作和标题操作,并创建了一个使用该子类的最小UITableView单元格类。SWIFT 3.0测试解决方案。如Objective-C的第一个示例所述;关键点是返回单元格。contentView而不是单元格,因此新的格式语法如下所示
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// HeaderCell is the name of custom row designed in Storyboard->tableview->cell prototype
let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell")
cell.songLabel.text = "Your Section Name"
return cell.contentView
}
将您的问题详细发送给@FerrisI我也遇到了这个问题,我很惊讶没有其他人有这个问题。如何创建标题?我通过原型单元格创建了它,并将它们作为标题重用。不过,我还没有尝试使用默认标题,也没有从头开始创建新标题(代码)。我还想指出,任何滑动都不仅会导致它自己的节标题一起移动,还会导致所有其他节标题一起移动。你这边也一样吗?解决了这个问题。如果使用UITableViewCell作为表的标题,请将其包装在UIView中。看看我的回答@CyberMewI建议按照@ferris的建议,在UIView中包装标题单元格。我尝试了下面引用cell.contentView的方法,但我的单元格上的一些按钮无法显示。这似乎无法解决任何问题<代码>表格视图:在编辑RowAtIndexPath时应删除:
永远不会被调用。我相信这是针对分组表的。至于editingStyleForRowAtIndexPath:
,它只会被正在刷卡的单元格调用一次。不管怎样,谢谢你的帮助。我刚试过,效果很好。然而,我在标题单元格中有一个按钮,它不再对触摸做出响应。这就好像userInteractionEnabled被设置为NO,即使我确保所有的都是YES。也有同样的问题。我发现,如果将对象添加到单元格contentView,则它们没有响应。如果将它们添加到“单元格”视图中,它们工作正常。例如:[cell addSubview:view]代码>或在自定义单元格中:[self addSubview:view]代码>@CyberMewI修复了它。我没有直接将单元格添加到UIView,而是添加了cell.contentView。这样就不会有其他改变——你仍然可以在故事板中创建你的单元格。现在一切都好了。即使是我以前轻敲标题并导致选择第一行的问题现在也已修复:)。在我的例子中,我最初将主分割视图的宽度改为更宽,因此作为一个额外的步骤,我现在还必须设置cell.contentView的框架和边界(当然还有故事板中的约束),以使其在iOS7和iOS8上看起来正确。谢谢你给我指路!:)这就是我(在viewForHeaderInSection中)使用的代码:UIView*cellView=[[UIView alloc]initWithFrame:headerView.contentView.bounds];[cellView添加子视图:headerView.contentView];//headerView是来自出列返回cellView的单元格谢谢,很高兴我能帮上忙@这对我来说很有效。我只需要将“.contentView”添加到返回的单元格中。当我添加.contentView时,我得到的是空白,而不是正确的headers@Carlos当我使用标准的“基本”电池时,也发生了同样的情况。将其更改为自定义文件。@SimonB是的,我使用单独的xib文件完成了此操作。很有效。我相信在这之后,头部的背景色会消失。这对m很有效
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// HeaderCell is the name of custom row designed in Storyboard->tableview->cell prototype
let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell")
cell.songLabel.text = "Your Section Name"
return cell.contentView
}