[英]In iOS 8.1, when I click on a row's delete button while UITableView is in edit mode, the row and those above it display incorrectly
我有一个UITableView显示不同部分下的单元格。 可以删除每个部分中的单元格。 即,当UITableView处于编辑模式时,单元格的样式设置为UITableViewCellEditingStyleDelete。 当用户单击具有此样式的单元格中的删除按钮时,“删除确认”按钮将按预期显示在右侧。 自从更新到iOS 8.1版以来,行的内容和它上面的节标题单元格的内容都向左倾斜。
这很好用,直到我更新到iOS 8.1版。 有没有其他人遇到这个?
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[_store getGroceryAisles] itemCount];
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self isCellBeingEdited:indexPath])
{
return UITableViewCellEditingStyleNone;
}
else
{
return (_editIsDeleting) ? UITableViewCellEditingStyleDelete : UITableViewCellEditingStyleInsert ;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSArray* aisles = [[[self store] getGroceryAisles] list];
HGGSGroceryAisle* aisle = [aisles objectAtIndex:section];
return [[aisle grocerySections ] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"GrocerySectionCell";
HGGSGrocerySection * grocerySection;
grocerySection = [self grocerySectionAt:indexPath inTableView:tableView];
if ([self isCellBeingEdited:indexPath])
{
if ([tableView isEditing])
cellIdentifier = EDIT_CELL_ID;
else
{
_ipBeingEdited = nil;
}
}
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if ([cellIdentifier isEqualToString:EDIT_CELL_ID])
{
NSString* name = [grocerySection name];
// skipping other code to set up cell when editing cell....
_cellBeingEdited = cell;
}
else
{
[[cell textLabel] setText:[grocerySection name]];
}
return cell;
}
-(UITableViewCell*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
NSString *cellIdentifier;
HGGSGroceryAisle* aisle;
if ((tableView == [self tableView]) && (section == 0))
{
cellIdentifier = (tableView.isEditing) ? @"EditngAislesConfigHeaderCell" : @"AislesConfigHeaderCell";
}
else
cellIdentifier = @"GrocerySectionHeaderCell";
UITableViewCell *cell= [[self tableView] dequeueReusableCellWithIdentifier:cellIdentifier];
UILabel *aisleLabel = (UILabel*)[cell viewWithTag:1] ;
NSString *aisleLabelText = [NSString stringWithFormat:@"Aisle %li",(long)[aisle number]];
aisle = [[_store getGroceryAisles] itemAt:section];
[aisleLabel setText:aisleLabelText];
[aisleLabel setAccessibilityLabel:aisleLabelText];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
if ((_ipBeingEdited) && (_ipBeingEdited.row == indexPath.row) && (_ipBeingEdited.section == indexPath.section))
return NO;
else
return YES;
}
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Delete the row from the data source
[_store removeGrocerySection:[self grocerySectionAt:indexPath inTableView:tableView] fromAisle:[self aisleAt:indexPath inTableView:tableView]];
[tableView reloadData];
}
}
在方法中:
-(UITableViewCell*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
...
return cell;
}
而不是返回单元格对象,尝试返回contentView。
-(UITableViewCell*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
...
return cell.contentView;
}
我以这种方式解决了我的问题。 我正在使用Swift,但在Objective-C中它似乎是一样的。
我的问题是我从“viewForHeaderInSection”返回一个UITableViewCell。 通过返回单元格的contentView来纠正行为。
有趣的是,原始代码在iOS 7中运行良好。我不知道它是按设计还是偶然工作。 即,由于UITableCellView继承自UIView,我不确定返回UITableViewCell是否真的不正确。 作为一个fyi(如果它帮助其他人寻求实现自定义页眉和页脚),我想到了如何使用Storyboard从如何实现自定义表视图部分页眉和页脚返回contentView属性。
尝试这个
First Edit按钮添加到ViewControl顶部的NavigationBar
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete)
{
[imagearray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if(editingStyle == UITableViewCellEditingStyleInsert)
{
}
}
我希望它对你有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.