2

グループ化されたセクションからセルをプログラムで追加または削除するにはどうすればよいですか?

ストーリーボードの静的セルを使用して、グループ化されたテーブルビューを作成しました。ストーリーボード内で、属性インスペクター パネルを使用して行数を設定しました。たとえば、セクション 1 では、3 つの行を定義します。次に、3 項目の NSMutableArray を使用して、起動時に各セクションに値を適切にロードできます。

最終的には、実行時にセルを追加/削除する機能が必要です。その部分はまだコーディングされていませんが、新しいセル シナリオの追加をシミュレートするために、コード内の配列に新しい項目を追加しましたが、属性インスペクター パネルのセクションの行数は増やしませんでした。numberOfRowsInSection メソッド内で特定のセクションの配列のカウントを返すため、新しいアイテムに対応するために他の変更を加える必要がないことを望んでいました。

これは、コードを再実行したときに表示されるエラー メッセージです。

* キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '* -[__NSArrayI objectAtIndex:]: 境界を超えたインデックス 3 [0 .. 2]'

どうやら追加の行数を指定する必要があるようです。実行時にこれを行う方法について誰かが光を当てることができますか? ありがとう。

4

3 に答える 3

1

属性インスペクターを介してそれを行うべきではありません。セルの動的な挿入と削除を行うことを控えます。試す

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [yourArray count];
}

そうでなければこれを行います。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(section==0){
       return 3;
    }else if(section==1){
       return 4;
    }
 return 0;
}

uに多くのセクションがある場合は、別のセクションについても同様です。データが読み取られる配列が更新されると、テーブル全体をリロードできます。

[tableView reloadData];

しかし、それを行うためのより良い方法は、ブロックにこのような行または複数の行を挿入することです。

[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:yourIndexPath withRowAnimation:UITableViewRowAnimationRight];
[tableView endUpdates];

アニメーションを追加して、右または右または上または下からセルを追加することもできます。

これがお役に立てば幸いです!! 乾杯!!

于 2012-09-22T09:59:03.000 に答える
0

I guess that you hardcoded the number of rows for your section. Because looking at the error it seems that your section is expecting 4 object but your data source contains only 3.

Inside your :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

you should return something like [myArray count], so adding or delting rows shouldn't be a problem if you add or remove the object from your array.

于 2012-09-22T09:59:28.600 に答える
0

You have Predefined methods in UITableview for Inserting and deleting row, For insertion we can user insertRowAtIndexPath method and for deletion use deleteRowAtIndexPath methods.

于 2012-09-22T09:59:34.393 に答える