UITableViewController子类setEditing:从不将tableView置于编辑模式

时间:2012-09-28 03:58:04

标签: ipad uipopovercontroller uiswipegesturerecognizer

我正在使用SplitViewController和Core Data。我的Master视图是一个简单的TableView,就像SplitViewController模板一样。我有这三种方法:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}



// 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
        NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
        [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

        [self saveContext];
    }   
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleDelete;
}

我认为当我滑动行删除它时,这足以显示删除按钮。现在发生的事情是,如果你第一次刷它,只有第一次,删除按钮显示然后消失。如果我再次滑动,则没有任何反应。我需要重新启动模拟器才能再次显示它。在我的TableViewCell上,我有一个UILabel和一个UITextField。我想也许UITextField会拦截滑动,但我调整了它们的大小,所以它们只在左半边以防万一。

编辑:

所以我还没弄清楚为什么会这样。我想我会添加一个编辑按钮来测试tableView setEditing:甚至被调用。所以在我的行动方法中,我这样做:

- (IBAction)setEditMode:(id)sender {
    [self.tableView setEditing:YES animated:YES];
}

此方法确实被调用,但tableView永远不会进入编辑模式。所有这些都在UITableViewController的子类中。还有别的东西我不见了吗?谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个,

- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath {

    if(editingStyle == UITableViewCellEditingStyleDelete) {

        //Get the object to delete from the array.
        Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:indexPath.row];
        [appDelegate removeCoffee:coffeeObj];

        //Delete the object from the table.
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}