暂时删除不可编辑的单元格UITableView

时间:2012-07-04 13:33:07

标签: iphone objective-c xcode uitableview

我在tableView中实现了这段代码:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0) {
        return NO;
    }
    return YES;
}

它做了我想要的,但我想更好一步,当按下编辑按钮时,“第0部分”完全消失(如果你进入iOS上的“键盘”菜单,可以看到这种效果并选择在右上角编辑,前两个部分在动画中消失)。我试图暂时删除第一部分,但是在调用[tableView reloadData];时我的应用程序崩溃了:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if (tvController.editing == YES) {
        return 1;
    }else if (tvController.editing == NO) {
        return 2;
    }
    return 0;
}

另外,如果我的代码工作正常,我认为我不会得到动画,我认为我的方法是错误的。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您的问题

您的某个部分比前一部分长。

由于您通过在numberOfSectionsInTableView:中报告减少1个部分来隐藏第0部分,因此在编辑模式下,每个委托方法都必须调整部分编号。其中一个没有这样做。

// every delegate method with a section or indexPath must adjust it when editing

- (NSInteger) tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tvController.editing) section++;
    return [[customers objectAtIndex:section] count];
}

- (UITableViewCell*) tableView:(UITableView*) tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath
{
    int section = indexPath.section;
    if (tvController.editing) section++;

    id customer = [[customers objectAtIndex:section] indexPath.row];

    // etc
}

我的方法

UITableView reloadSections:withRowAnimation:使用动画重新加载指定的部分。从您的setEding:animated:委托方法中调用它。

- (void) setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

    UITableViewRowAnimation animation = animated ? UITableViewRowAnimationFade : UITableViewRowAnimationNone;
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:animation];

    [self.tableView reloadSectionIndexTitles];

    self.navigationItem.hidesBackButton = editing;
}

您的代理人还需要指出隐藏的部分没有行或标题。

- (NSInteger) tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    if (self.editing && section == 0) {
        return 0;
    }

    return [[customers objectAtIndex:section] count];
}

- (NSString*) tableView:(UITableView*) tableView titleForHeaderInSection:(NSInteger) section
{
    if (self.editing && section == 0) {
        return nil;
    }

    [[customers objectAtIndex:section] title];
}