タイトルが付いたものや、左側にアイコンがあり右側にタイトルが付いたものなど、デフォルトのセルがいくつかあります。
これらのセルをストーリーボードに追加して識別子を割り当てたくないのですが、それは可能ですか?
再利用可能でなければならず、新しい再利用不可能なセルを割り当てる方法を知っています
以下の回答を試しましたが、
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];
正しいはずですが、非常に退屈で簡単に忘れてしまいます
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
上記の方法はすべてのコードを1か所に配置するのでより良いかもしれませんが、dequeueReusableCellWithIdentifier:forIndexPath:(indexPathを使用)を試みるとクラッシュします。
ストーリーボードにプロトタイプセルがない場合は、dequeueReusableCellWithIdentifier:apiを使用してクラシックセルを作成できます。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
迅速:
var cell : UITableViewCell!
cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
}
ストーリーボードにプロトタイプセルがなくても、UITableViewCellをデキューできます。特定の識別子(文字列)のテーブルにセルを登録する必要があります。これは次のようにします。
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];
たぶんviewDidLoad
でこれを行うことができます。
その後、通常どおりcellForRowAtIndexPath
メソッドでその識別子を使用してセルをデキューできます。
編集:
もちろん、MyCellIdentifier
はどこかで定義した定数です。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
return UITableViewCell(style: .default, reuseIdentifier: "cell")
}
return cell
}()
cell.textLabel?.text = anyArray[indexPath.row]
return cell
}
セルをラップ解除するので、それは良いことです。
セルをデキューする必要があり、nil
を取得した場合は作成します。セルのxibファイルで、その識別子を定義します。
nibファイルにセル識別子を設定:
再利用可能なセルを取得するか、新しいセルを作成します:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"myCell";
MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
NSArray *t = [[NSBundle mainBundle] loadNibNamed:@"myCellXibFileName" owner:nil options:nil];
for (id currentObject in t)
{
if ([currentObject isKindOfClass:[MyCell class]])
{
cell = (MyCell *)currentObject;
break;
}
}
}
// Do whatever you want with the cell....
return cell;
}
コンポーネントライブラリを開き、UITableViewCellをTableViewストーリーボードにドラッグし、このセルを選択してIDインスペクターを開き、必要なデフォルトスタイルを選択し、コードでdequeueReusableCellWithIdentifierと同じセル識別子を設定します。