自定义editingAccessoryView不工作
我有以下代码为自定义单元格的UITableView:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FolderCellViewController"]; if (cell == nil) { // Load the top-level objects from the custom cell XIB. NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"FolderCellViewController" owner:self options:nil]; // Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain). cell = [topLevelObjects objectAtIndex:0]; cell.editingAccessoryView=accessoryView; //accessoryView is a UIView within a UITableViewCell, and it is properly connected in IB cell.selectionStyle = UITableViewCellSelectionStyleNone; } return cell; } // Override to support conditional editing of the table view. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. return NO; //YES here makes a red delete button appear when I swipe } // Override to support editing the table view. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // Delete the row from the data source // [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } else if (editingStyle == UITableViewCellEditingStyleInsert) { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } }
但有些时候,我刷卡什么都没有发生。 除此之外,我还没有做任何事情 – 还有什么我需要做的这个工作?
编辑:显然我所做的只是当整个表处于编辑模式,而不是当我在每个单独的单元格上滑动设置编辑样式。 所以我想要做的是当我滑过每个单元格,自定义的附件查看出现该单元格。 但我不知道该怎么做
当单元格进入编辑模式时显示编辑附件视图。 这似乎有点太难以实际得到这个工作,但我已经pipe理它:
为了在进入整个表格的编辑模式时以及在刷单行时显示出来,我在我的UITableViewController子类中实现了以下内容:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated { if (editing) self.editingFromEditButton = YES; [super setEditing:(BOOL)editing animated:(BOOL)animated]; self.editingFromEditButton = NO; // Other code you may want at this point... }
editingFromEditButton
是子类的BOOL属性。 当按下标准的“编辑”button时调用此方法。 它用于防止标准删除button显示的以下方法:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { if (self.editingFromEditButton) return UITableViewCellEditingStyleNone; // Otherwise, we are at swipe to delete [[tableView cellForRowAtIndexPath:indexPath] setEditing:YES animated:YES]; return UITableViewCellEditingStyleNone; }
如果整个表格视图被设置为编辑模式,那么每个单元格也将被发送setEditing消息。 如果我们已经刷了一行,那么我们需要强制该单元格进入编辑模式,然后返回UITableViewCellEditingStyleNone
样式,以防止出现标准的删除button。
然后,要closures自定义编辑配件,还需要以下代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Cancel the delete button if we are in swipe to edit mode UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if (cell.editing && !self.editing) { [cell setEditing:NO animated:YES]; return; } // Your standard code for when the row really is selected... }