4

そのため、この問題は前の問題から続いていますが、関連性と整理性を保つために新しい質問を投稿することにしました。

基本的に、次のコードが呼び出されると、 と の間に違いはありませUITableViewRowAnimationFadeUITableViewRowAnimationNone

- (void) setEditing:(BOOL)editing animated:(BOOL)animated
{

    [tvController.tableView beginUpdates];

    if (editing == YES) {
        [tvController.tableView deleteRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:UITableViewRowAnimationFade];

    }else {

        UITableViewRowAnimation animation = animated ? UITableViewRowAnimationFade : UITableViewRowAnimationNone;
        [tvController.tableView reloadRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:animation];

        [tvController.tableView reloadSectionIndexTitles];

        self.navigationItem.hidesBackButton = editing;
    }
    [tvController.tableView endUpdates];
}

どんな助けでも大歓迎です。それはまだ編集モードに入りますが、アニメーションに YES が渡されたにもかかわらず、アニメーションにはなりません。


編集:次のコードを使用して実際に物を削除すると、アニメーションは正常に機能します:

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

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

        NSString *stuff = [documentsPath stringByAppendingPathComponent:@"stuff.plist"];
        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:stuff];

        if (fileExists) {

            NSMutableDictionary *propertyList = [[NSMutableDictionary alloc] initWithContentsOfFile:enteredPlaces];
            [propertyList removeObjectForKey:[[settingsArray objectAtIndex:1] objectAtIndex:indexPath.row]];
            [propertyList writeToFile:stuff atomically:YES];
        }

        [[settingsArray objectAtIndex:1] removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];

    } 
}

ユーザーが編集ボタンを押してテーブルが編集モードになると機能しません。テーブルビューは静的に編集モードにスナップするだけです。

4

3 に答える 3

0

あなたがイライラしているのは、削除が消えないという事実だけである場合、それはインターフェースが提供しない何かを予期しているからです。

個々のセルを編集不可に設定できることを知っているとおっしゃいましたが、これが標準的な方法です。このメカニズムは、UITableViewDataSource を使用して、編集/完了ボタンを押すだけで、何を表示するか (または、あなたの場合は、変更されるデータの内容) に関する情報を提供しないことを想定していません。

2 つを組み合わせようとすると、発生するはずのアニメーションが混乱します。

おそらくあなたができる最善のことは、次のようなものです(また、tableViewで別のアニメーションを要求しているため、アニメーションの期間と長さはおそらく0になる可能性があります)。これにより、編集を開くアニメーションの後にアニメーションが発生しますモード。

- (void) setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];  // possibly not necessary depending upon your class hierarchy
    [tvController.tableView setEditing:editing animated:animated];
    [UIView animateWithDuration:0.25 delay:0.05 options:UIViewAnimationCurveLinear
                     animations:^{ 
                         [tvController.tableView beginUpdates];

                         if (editing == YES) {
                             [tvController.tableView deleteRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:UITableViewRowAnimationFade];
                         } else {
                             UITableViewRowAnimation animation = animated ? UITableViewRowAnimationFade : UITableViewRowAnimationNone;
                             [tvController.tableView reloadRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:animation];
                             [tvController.tableView reloadSectionIndexTitles];
                             self.navigationItem.hidesBackButton = editing;
                         }
                         [tvController.tableView endUpdates];
                     }
                     completion:nil];
}
于 2012-07-08T04:07:13.180 に答える
0
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [db DeleteData:[NSString stringWithFormat:@"%d",indexPath.row]];
        [data removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationFade];

    }   

}
于 2012-07-07T07:21:22.523 に答える
0

私のアプリケーションには同じシナリオがあり、同様の問題に直面していました。以下の機能で問題が解決すると思います:

- (void) setEditing:(BOOL)editing animated:(BOOL)animated
{

    [tvController.tableView setEditing:editing animated:animated]; //this LOC is added 

    [tvController.tableView beginUpdates];

    if (editing == YES) {
        [tvController.tableView deleteRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:UITableViewRowAnimationFade];

}    else {

        UITableViewRowAnimation animation = animated ? UITableViewRowAnimationFade : UITableViewRowAnimationNone;
        [tvController.tableView reloadRowsAtIndexPaths:[settingsArray objectAtIndex:0] withRowAnimation:animation];

        [tvController.tableView reloadSectionIndexTitles];

        self.navigationItem.hidesBackButton = editing;
    }
        [tvController.tableView endUpdates];
}


-(void)deleteRecord:(NSInteger)recordNo:(NSInteger)sectionNo:(BOOL)isEditMode:(BOOL)isAnimate {

if(isEditMode){
    NSIndexPath *indexP=[NSIndexPath indexPathForRow:recordNo inSection:sectionNo];
    [tvController.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexP, nil] withRowAnimation:UITableViewRowAnimationLeft];
}
else {

    if(isAnimate)
        [tvController.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexP, nil] withRowAnimation:UITableViewRowAnimationFade];
    else
        [tvController.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexP, nil] withRowAnimation:UITableViewRowAnimationNone];

    [tvController.tableView reloadSectionIndexTitles];
    self.navigationItem.hidesBackButton = editing;

}


[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(reload) userInfo:nil repeats:NO];
}


 -(void)reload {
    [table reloadData];
}
于 2012-07-07T05:30:36.147 に答える