0

他の処理を行った後に静的セルの一部を変更したい UITableView があります。変更したいセル用にアウトレットをセットアップしましたが、NSLog を使用してそれらを見ると、正しいセルがないことを示す nil が表示されます。たとえば、下の画像では、日付の場合と同じようにラベルに開始時刻を追加します (日付は、現在の日付を取得したセルを作成するときに行われます)。

ここに画像の説明を入力

別のシーンに移動する開示インジケーターをタップします (これはストーリーボードで作成され、あるシーンから別のシーンに移動するためにセグエを使用しています)。次に、メイン シーン (表示) に戻り、Start Time ラベルを変更しようとしましたが、何も起こりません。ラベルを変更しようとする前のラベルの NSLog は、次のように返します。

oStartTimeCell.textLabel.text: (null)

このテキストフィールドは読み取り専用であるという Apple ドキュメントの 1 つを読みました。この場合に当てはまる場合、更新された情報でセルをリロードする方法はありますか? または、これを行う別の方法はありますか?

4

3 に答える 3

2

あなたは間違ったアプローチを使用しています。アウトレットを使用してセルへの参照を作成しないでください。セルが可視ビューの外に移動すると、アウトレットは null になるか、ガベージ データが含まれます。(あなたの状況で)セルがビューから移動しない場合でも、意図されていない方法で UITableView を使用しようとしていることを示していると思います。

代わりに、セルに表示したいデータを配列などの dataSource に入れます。

tableView は dataSource を使用して、セルの textLabels に表示される値を構成する必要があります。セルに表示されるテキストを更新したい場合は、dataSource の値を変更しreloadData、tableView を呼び出して、tableView-tableView:cellForRowAtIndexPath:と関連する UITableViewDataSource メソッドを強制的に呼び出します。

于 2013-05-19T20:10:18.837 に答える
0

各セルに IBOutlet を作成して接続してみてください。

IBOutlet UITableViewCell *cell1;
IBOutlet UITableViewCell *cell2;
IBOutlet UITableViewCell *cell3;

また、メソッドを次のように変更します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(indexPath.row == 0) return cell1;
    if(indexPath.row == 1) return cell2;
    if(indexPath.row == 2) return cell3;

    if (cell == nil) {
        //create cell;
    }
    return cell;
}
于 2013-05-19T19:40:35.417 に答える
0

UILabel を使用してテキストを表示していますか? . へのアウトレットを作成し、tableView がロードされた後に呼び出されるメソッドなどUIlabelを更新するだけの場合。cellForRwoAtIndexPathdidSelectRowAtIndexPath

UILabel を使用しておらず、 cell.textLabel のみを使用している場合は、 cell.textLabel.text = @"ChangedText"in のようなことができますcellForRowAtIndexPathMethod。チェックして、必要なセルを編集していることを確認してくださいindexPath.row

[tableView reloadData]cellForRowAtIndexPath を呼び出すようにします。

于 2013-05-19T20:05:17.953 に答える