[解決済み] iOS 6 UITableView dequeueReusableCellWithIdentifier:forIndexPath を使用した場合のUITableViewCellのスタイル設定。
質問
を設定する方法を探しています。
UITableViewCellStyle
の新しいメソッドを使用する場合、iOS 6 の
UITableView
.
以前は
UITableViewCell
を変更することにしていました。
UITableViewCellStyle
を呼び出す際に、異なるタイプのデフォルトセルを作成するようにします。
initWithStyle:
を呼び出したときに、異なるタイプのデフォルトセルを作成することができましたが、私が調べたところでは、これはもはやそうではありません。
に関する Apple のドキュメントは
UITableView
は述べています。
戻り値 : UITableViewCellオブジェクトとそれに関連付けられた再利用識別子。このメソッドは常に有効なセルを返します。
ディスカッション : パフォーマンス上の理由から、テーブルビューのデータソースは、一般的に tableView:cellForRowAtIndexPath: メソッドで行にセルを割り当てるとき、UITableViewCellオブジェクトを再利用する必要があります。テーブルビューは、データソースが再利用のためにマークしたUITableViewCellオブジェクトのキューまたはリストを保持します。テーブルビューに新しいセルを提供するように要求された場合、データソースオブジェクトからこのメソッドを呼び出します。このメソッドは、既存のセルが利用可能な場合はそのキューを削除し、以前に登録したクラスまたはnibファイルに基づいて新しいセルを作成します。
重要 : このメソッドを呼び出す前に registerNib:forCellReuseIdentifier: または registerClass:forCellReuseIdentifier: を使用してクラスまたは nib ファイルを登録する必要があります。
指定された識別子のクラスを登録し、新しいセルを作成する必要がある場合、このメソッドはその initWithStyle:reuseIdentifier: メソッドを呼び出すことでセルを初期化します。nib ベースのセルの場合、このメソッドは提供された nib ファイルからセルオブジェクトをロードします。既存のセルが再利用可能であった場合、このメソッドは代わりにセルの prepareForReuse メソッドを呼び出します。
これは私の新しい
cellForRowAtIndexPath
は新しいメソッドを実装した後、次のようになります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell_identifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
return cell;
}
今までのコードは問題なく動作しますが、常にデフォルトのスタイルが返されます。これを変更して、次のような他のスタイルのセルを作成できるようにするにはどうしたらよいでしょうか。
UITableViewCellStyleDefault
,
UITableViewCellStyleValue1
,
UITableViewCellStyleValue2
と
UITableViewCellStyleSubtitle
?
私は、サブクラス
UITableViewCell
をサブクラス化したいわけではなく、iOS 6 以前と同じようにデフォルトの型を変更したいだけです。Apple が強化されたメソッドを提供しながら、その実装をサポートするための最小限のドキュメントしかないのは奇妙に思えます。
どなたかこれをマスターされた方、または同様の問題に遭遇された方はいらっしゃいますか?合理的な情報をまったく見つけるのに苦労しています。
どのように解決するのですか?
サブクラスを作成したくないとおっしゃいましたが、避けられないようです。iOS 6.0 シミュレーターでテストしているときのアセンブリ コードに基づくと。
UITableView
の新しいインスタンスを作成します。
UITableViewCell
(またはそのサブクラス) のインスタンスを生成します。
[[<RegisteredClass> alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:<ReuseIdentifier>]
つまり、送られたスタイル(
UITableViewCellStyleDefault
) はハードコードされているように見えます。これを回避するには、デフォルトのイニシャライザーをオーバーライドするサブクラスを作成する必要があります。
initWithStyle:reuseIdentifier:
をオーバーライドし、使用したいスタイルを渡すサブクラスを作成する必要があります。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
// ignore the style argument, use our own to override
self = [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier];
if (self) {
// If you need any further customization
}
return self;
}
また
registerClass:forCellReuseIdentifier:
で
viewDidLoad
の中で、セルが要求されるたびにそれを行うのではなく
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:<RegisteredClass> forCellReuseIdentifier:<ReuseIdentifier>];
}
関連
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] UITableView didSelectRowAtIndexPath:最初のタップで呼び出されない
-
[解決済み】dequeueReusableCellWithIdentifier:forIndexPathでアサーションに失敗しました。
-
[解決済み】ストーリーボードで、複数のコントローラで使用するためのカスタムセルを作成する方法は?
-
[解決済み] Storyboardでカスタムテーブルビューのセクションヘッダーとフッターを実装する方法
-
[解決済み] SwiftでnibからカスタムUITableViewCellを作る
-
[解決済み] iOS 7 - テーブルビューで日付ピッカーを表示するには?
-
[解決済み] iOS 7でUITableViewがオフセットで開始される件
-
[解決済み] UITableViewCellを無効に表示するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン