ストーリーボード、静的セルを使用して、cellForRowAtIndexPath:
行に
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
常にnil
を返します。
私は以下をチェックしました:
私のビューコントローラーはUITableViewController
のサブクラスですが、もちろん、ストーリーボードのアドホックナビゲーションコントローラーにラップされています。ビューコントローラがストーリーボードで定義されたセル識別子を知らないのは別のインスタンスである可能性があるため、これが「インスタンス化」するコードです。 prepareForSegue:
では、
CustomViewController *vc = [[[segue destinationViewController]
viewControllers] objectAtIndex:0];
ここで行われるViewControllerの他のカスタマイズ(プロパティの設定など)は正常に機能します。
セクションと行の数が変わらず、各セルに静的テキスト(および編集する他のコントロールまたはテキストフィールド)が含まれているため、静的セルを使用しています。
これは非常に一般的なタスクのようです(ビューコントローラーのデータソースメソッドでストーリーボードから静的セルをカスタマイズします)。私は何が間違っているのですか?
テーブルビューの静的コンテンツでは、データソースメソッド(tableView:cellForRowAtIndexPath:
を含む)を実装しないため、セルをデキューすることはありません。静的コンテンツのデキューはありません(とにかく関与できます)。 。
特定のセルへのポインタを取得する場合:
cellForRowAtIndexPath:
を使用してテーブルビューから取得します。
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
特定のセルへのコンセントがあり、直接カスタマイズします。
reuseIdentifier
プロパティをチェックして、目的のセルを取得します。これらのことはすべて、viewWillAppearなどで実行できます。
ストーリーボードにあるコンテンツとは完全に異なるコンテンツをセルに入れたい場合は、静的セルはおそらく正しい選択ではありません。代わりに、従来のデータソースメソッドで動的プロトタイプ(ストーリーボードに複数のプロトタイプを含めることができることに注意してください)を使用する必要があります。
ストーリーボードでは、静的セルは<UITableViewDataSource>
プロトコルのメソッドを実装できません。
したがって、<UITableViewDelegate>
に含まれているメソッドを使用できます。
Static UITableView
のdataSource/delegateメソッドを引き続き使用できます。新しいセルをcreateする必要はありません。
DataSourceメソッドを使用してセルを変更する場合は、cellForRowAtIndexPath:
内:
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
次に、セルの変更を開始します。
上記の答えとは異なり、
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
動作しないでしょう。しかし、cell
自体へのアウトレットを作成する前述の方法は機能しています。
UIButtons
やUITextFields
などのビューをcell
に配置し、それらのアウトレットを設定することもできます。
両方の方法を組み合わせて使用することもできます。例えば。をセットする cell.textLabel.text
特定のセル用で、コントロールコンセントからアクセスされる別のコントロールがあります。
解決策は、静的セルではなくプロトタイプセルを使用することでした。 @jrturtonが私にアイデアを最初にくれたので、私はまだチェックをしています。
私が解決したもう1つの興味深いエラー:「カスタム」タイプのプロトタイプセルで、cell.textLabel
にテキストを入力しようとすると、自動的に機能しますが、他のすべてのサブビューは非常に奇妙に動作します。今はカスタムラベルを使用しているだけで、すべて正常に機能します。
乾杯、助けてくれてありがとう。