我希望能够在我的UITableViewCell
中隐藏标签,以便在用户滑动删除单元格时阻止其与标题重叠。
我正在使用以下代码启动和处理要删除的滑动:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates]; // Avoid NSInternalInconsistencyException
// Delete the project object that was swiped
Project *projectToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting (%@)", projectToDelete.name);
[self.managedObjectContext deleteObject:projectToDelete];
[self.managedObjectContext save:nil];
// Delete the (now empty) row on the table
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[self performFetch];
[self.tableView endUpdates];
}
}
我已使用以下内容在单元格中指定了标签:
UILabel *projectDate = (UILabel *)[cell viewWithTag:3];
projectDate.text = project.dateStarted;
并尝试过设置
projectDate.hidden = YES;
然而,这不起作用。
答案 0 :(得分:6)
我认为你需要继承UITableViewCell
来实现它。在子类中覆盖- (void) setEditing:(BOOL)editing animated:(BOOL)animated
。在此方法中,您可以隐藏标签。如果您只需要隐藏删除操作的标签,请使用self.editingStyle
根据编辑样式有条件地隐藏标签(aka:UITableViewCellEditingStyleDelete)。
以下是两个例子。我更喜欢第二个例子,它更容易。但是示例之一将允许您替换可能有用的文本:
@implementation CellSubclass{
NSString *_labelText; //only used in example 1
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
// Example 1, replacing the text value
- (void) setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
if (editing && self.editingStyle == UITableViewCellEditingStyleDelete){
UILabel *label = (UILabel *)[self viewWithTag:3];
_labelText = label.text;
self.textLabel.text = nil;
} else if (!editing && _labelText){
UILabel *label = (UILabel *)[self viewWithTag:3];
label.text = _labelText;
}
}
//Example 2 - hiding the view itself
- (void) setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
if (editing && self.editingStyle == UITableViewCellEditingStyleDelete){
[self viewWithTag:3].alpha = 0.0f;
} else {
[self viewWithTag:3].alpha = 1.0f;
}
}
@end
请注意,我有两个同名的方法。这显然是一个很大的禁忌......只使用其中一个。
另请注意,我忽略了动画参数。如果你希望在第二个例子(也就是......淡出/淡入)中对你的标签的消失进行动画处理,你需要做的就是在动画块中包围你的变化,如下所示:
[UIView animateWithDuration:.3f animations:^{
[self viewWithTag:3].alpha = 0.0f;
}];
我认为你不能为第一个例子制作动画。