0

ユーザーの入力に応じて、テーブルビューのセルの1つから開示シェブロンを削除する必要があります。コントローラのviewDidAppearメソッドでは、次のコードがあります。

NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];

何も起こりません。私が間違っていることを知っていただければ幸いです。

アップデート:

これらは、単一のセクションにある静的なグループ化されたセルです。ストーリーボードを使用してテーブルビューを作成し、プログラムで変更する必要のある各フィールド(通常はUILabels)を、テーブルビューからViewControllerのヘッダーファイルにcontrolキーを押しながらドラッグして名前付きアウトレットとして設定しました。

たとえば、私は次のようにしています。

@property (weak, nonatomic) IBOutlet UILabel *symbolLabel;  

ビューコントローラの.hファイルにあります。.mファイルでは、viewDidAppearメソッドに次の行を含めます。

self.symbolLabel.text = self.dataSource.symbol;

このように、私はまったく実装する必要がありませんでしたcellForRowAtIndexPath:。これは物事を行うための間違った方法ですか?

また、テーブルビューが表示されると、削除したいシェブロンのセルが画面の下部に表示されます。

すべてのあなたの助けと忍耐に感謝します。

4

5 に答える 5

1

セルが画面に表示されていない場合は、 をcellForRowAtIndexPath返しますnil。これは論理的です。セルはメモリを節約するために再利用されるため、表示する必要のないセルは単に再キューイングされ、現在表示されているインデックス パスに属します。

これを解決するには、セルの開示スタイルを外部から明示的に設定する代わりに、

tableView:cellForRowAtIndexPath:

方法。アクセサリーの種類の数値や、NSArray などに基づく条件を格納できます。

于 2012-07-07T22:23:10.493 に答える
0

@max_で述べたように、リロード関数を呼び出す必要があると思います

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:section0Row10] withAnimation:UITableViewRowAnimationAutomatic];

ただし、これを呼び出すと、cellForRowAtIndexPathロードする新しいセルを取得するためにメソッドが使用されます。したがって、reloadメソッドで指定されたインデックスパスに対して、そのメソッドから返されるセルにが含まれていないことを確認する必要がありますaccessoryView

たぶん、cellForRowAtIndexPathメソッドにブレークポイントを設定して、リロードがトリガーされた後に何が起こるかを確認してください。

于 2012-07-07T22:22:18.510 に答える
0

交換

{
NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];`
}

と、

NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self tableView:self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];

...の実装を呼び出していません。CellForRowAtIndexPath:それが問題です:)

于 2013-07-08T12:56:08.040 に答える
0

テーブルをリロードします。または、そのセルだけです。

于 2012-07-07T21:39:13.813 に答える
0

セルをリロードしてみてください:

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:section0Row10] withAnimation:UITableViewRowAnimationAutomatic];
于 2012-07-07T21:41:19.453 に答える