2012-01-29 7 views
0

私は各セルが90.0fの高さ(高さ)であるtableVIewを持っています。私のコード。TableViewセルの出現の問題

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 90.0; 
} 

ここで、テーブルのすべてのレコードを削除します。セルの高さは44(私は思う)のデフォルト値に縮小します。

1.)私の問題は、ユーザーがすべてのレコードを削除した後でもセルの高さを90.0fに維持する必要があるということです。私はこれをプログラム的にどのようにすることができますか?

2.)私は自分の細胞に2色を与えました。

cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ; 

iは黒色である第二のセルを削除すると、その後、第1および第3のセルの両方が白です。どのように私はこれを注文して白黒に並べ替えることができますか?

EDIT:

[OK]を、私は

-[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.'

でアサーション失敗を取得して終了これは動作しますが、私はテーブルの最後のレコードを削除しようとすると [tableview indexPathsForVisibleRows]

これはなぜですか?

CODE:

[self.tableView beginUpdates]; 

     [self.myArray removeObjectsInArray:discardedItems ]; 

     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];  

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES]; 

     [self.tableView endUpdates]; 
+0

を提供してください。 –

+0

そこに他の色がありましたので、私はそれを投稿するように変更しなければなりません – sharon

答えて

1

1)私はあなたがそれを行うことができるとは思いません。その周りの1つの方法は、ページを埋める空のセルのx量を表示することです。

2)セル削除時に[tableView reloadData]を呼び出すか、削除されたセルの前後の行で[tableView reloadCellAtIndex ...]を呼び出します。

+0

私は私の質問を編集しました。 – sharon

1

行の高さが実際には静的である場合(表示したように)、tableView:heightForRowAtIndexPath:を実装せず、代わりにテーブルビューのrowHeightプロパティを使用します。
これはコードまたはInterface Builderのいずれかで設定することができ、「行がない場合には縮小しています」という問題に対する解決策になるはずです。

あなたの2番目の問題:
あなたは約-[UITableView indexPathsForVisibleRows]を知っていますか?

これは、更新が必要なテーブルビューの部分だけをリロードするために使用できます。それはこのように行くだろう:

- tableView:(UITableView *)table commitEditingStyle:(UITableViewCellEditingStyle)style forRowAtIndexPath:(NSIndexPath *)path 
{ 
    NSArray *visibleCellPaths = [table indexPathsForVisibleRows]; 

    // replace this comment with whatever else needs to be done in any case... 

    if (style == UITableViewCellEditingStyleDelete) { 
     // replace this comment with the deletions of the model object 

     NSUInteger affectedPathIndex = [visibleCellPaths indexOfObject:path]; 
     NSMakeRange updateRange = NSMakeRange(affectedPathIndex, [visibleCellPaths count] - affectedPathIndex); 
     NSArray *cellPathsToReload = [visibleCellPaths subarrayWithRange:updateRange]; 

     // replace this comment with the bounds-checking. 
     // e.g. if you only had one section and the backing store was an array, it may look like this: 
     // while ([self.backingStore count] <= [[cellPathsToReload lastObject] row]) { 
     // NSUInteger remainingPathCount = [cellPathsToReload count]; 
     // if (remainingPathCount) break; 
     // cellPathsToReload = [cellPathsToReload subarrayWithRange:NSMakeRange(0, remainingPathCount - 1)]; 
     // } 

     [table reloadRowsAtIndexPaths:cellPathsToReload withRowAnimation:UITableViewRowAnimationFade]; 
    } 

} 
+0

これはうまくいきますが、テーブルの最後のレコードを削除しようとしたときに、 '[tableview indexPathsForVisibleRows]'が 'Assertion failure in - [UITableView _endCellAnimationsWithContext:]、/SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m :961'と 'キャッチされていない例外によるアプリケーションの終了' NSInternalInconsistencyException '、理由:'無効な更新:セクション0の行数が無効です。セクションに存在する行よりも多くの行を削除しようとしています。 – sharon

+0

私は自分の答えを更新し、コードを実際にテストしたものに置き換えました。これは私の設定でうまくいきますが、あなたの走行距離は変わるかもしれません... – danyowdee

0
  1. UITableViewrowHeightプロパティを設定します。

ドキュメントの状態:

レシーバの各行(テーブルセル)の高さ。

  1. は、あなたが黒のRGB値を書き出すのではなく、blackColorを使用することができます知っているあなたに、データ・ソース・コード
+0

私は編集として自分のコードを追加しました。質問の編集者を見てください – sharon