0

我有简单的主视图控制器和细节视图控制器,它们与两个 segue 相连,一个用于“显示细节”,一个用于“添加新”。

  • “显示细节”使用 setEditing:NO 连接到细节视图控制器。
  • 使用 setEditing:YES 点按“+”(添加图标)到详细视图控制器

iOS 5.1:“+”按我的预期工作,详细信息页面处于编辑模式,editingStyleForRowAtIndexPath 触发以显示插入和删除指示符。

iOS 6.0:“+”会转换到详细信息页面,但从不会触发 editingStyleForRowAtIndexPath。setEditing:YES 中的其他代码被执行。didSelectRowAtIndexPath 确实触发(代表=自我)。

一旦进入详细信息页面,编辑模式在这两种情况下都会按预期工作。

有任何想法吗?

// Master.m
if([[segue identifier] isEqualToString:@"NewRecipe"]) {

    DetailViewController *detailViewController = [segue destinationViewController];
    // stuff
    detailViewController.recipe = r;     
    detailViewController.delegate = self;
    detailViewController.editing = YES;
}


// Detail.m
-(void)setEditing:(BOOL)flag animated:(BOOL)animated {

   if (flag) {

   [self.tableView setEditing:flag animated:YES];
   [self.tableView beginUpdates];
   // the row does get added
   [self.tableView insertRowsAtIndexPaths:@[pathToAdd] withRowAnimation:UITableViewRowAnimationAutomatic];  
    // datasource gets updated here
    [self.tableView endUpdates];
    .... 
    }
}
4

1 回答 1

0

我想到了。我不知道为什么这是修复,我希望这不会用更糟糕的代码替换糟糕的代码。

 Master.m
// iOS 5 -- this is OK
detailViewController.editing = YES;

对于 iOS 6,我需要 detailViewController 来调用委托方法以确定是否设置编辑:YES。

Master.m
-(BOOL)isNewRecipe {
    return (_isNewRecipe == 1);
}

Detail.m
if ([self.delegate isNewRecipe]) {
    [self setEditing:YES];        
}
于 2012-10-01T17:28:50.507 回答