0

「詳細の表示」用と「新規追加」用の2つのセグエに接続された単純なマスタービューコントローラーと詳細ビューコントローラーがあります。

  • 「詳細を表示」は、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 では、デリゲート メソッドを呼び出して、setEditing:YES を設定するかどうかを決定するために、detailViewController が必要でした。

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

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