11166


現在スイッチを押すと`TableView`のセルを一行挿入する処理を行おうとしているのですが、下記のコードだと挿入されません。  
試しに`if`を抜けた後に`[self.tableView
reloadData];`を入れて実行すると、スイッチを押した後にセルが挿入されるようになるのですが、アニメーションもなくてカクカクした動きになっています。なので`insertRowsAtIndexPaths`を使ってセルの挿入を行いたいのですが、なぜ挿入されないのでしょうか？`reloadData`が実行されるとセルが挿入されるということは、挿入の処理は正しく行えており、アニメーションがうまく行えていないということなのでしょうか...？  
どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。

[code]

    if (sw.on) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1];
    
            [identifierInSection2 addObject:@"pickerCell"];
            [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    
        } else {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1];
    
            [identifierInSection2 removeLastObject];
            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
    
[/code]


CC BY-SA 3.0
2015-06-09T03:01:30.733
11149
2015-06-09T10:31:34.610
5210
question
ios objective-c uitableview
insertRowsAtIndexPathsでセルが挿入されない


「挿入」ボタンを押すと、テーブルの2行目に行を挿入し、「削除」ボタンを押すと、テーブルの2行目を削除するプログラムを作ってみました。  
テーブルに表示するデータであるNSMutableArray「dataArray」は、挿入時、2番目にアイテムを挿入し、削除時、2番目のアイテムを削除しています。ここがあなたのプログラムと異なるところですかね？  
なんの異常もなく動作することを確認のうえ、掲載しております。参考になさってください。

_ViewController.h_

[code]

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
    
    @end
    
[/code]

_ViewController.m_

[code]

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    @property (nonatomic) NSMutableArray *dataArray;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.dataArray = [@[@"Line 0"] mutableCopy];
    }
    
    - (IBAction)editTable:(UIBarButtonItem *)sender { // ツールバーに、「挿入」、「削除」ボタンアイテムを設置してある。
        if (sender.tag == 10) { // 挿入のボタンのtagが10
            NSString *newLine = [[NSString alloc] initWithFormat: @"Line %ld", self.dataArray.count];
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow: 1 inSection: 0];
            [self.dataArray insertObject: newLine atIndex: 1];
            [self.tableView insertRowsAtIndexPaths: @[indexPath] withRowAnimation: UITableViewRowAnimationTop];
        } else { // 削除ボタンの処理
            if (self.dataArray.count > 1) { // テーブルの行数が1行なら、それ以上削除しない。
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow: 1 inSection: 0];
                [self.dataArray removeObjectAtIndex: 1];
                [self.tableView deleteRowsAtIndexPaths: @[indexPath] withRowAnimation: UITableViewRowAnimationTop];
            }
        }
    }
    
    // Table View Delegate and DataSource
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return self.dataArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"Cell" forIndexPath:indexPath];
        cell.textLabel.text = self.dataArray[indexPath.row];
    
        return cell;
    }
    
    @end
    
[/code]


CC BY-SA 3.0
2015-06-09T07:08:52.947
11166
2015-06-09T10:31:34.610
2015-06-09T10:31:34.610
7362
7362
11149
answer