2017-08-27 25 views
0

私はSwift 3でカスタムUITableViewCellを持っています(MyCustomTableViewCellと呼ぼう)。識別子は "CustomCell"です。カスタムUITableViewCellをreuseIdentifierに登録する必要がありますか?

私は再利用のためにそれを登録せず、私のカスタムセルを使用している場合、私はテーブルにアクセスしようとしたとき、私は

override func viewDidLoad() { 
    super.viewDidLoad()  

    myUITableViewThatIsIBOutlet.register(MyCustomTableViewCell.self, forCellReuseIdentifier: "CustomCell") 
} 

を経由して再利用のためにそれを登録しようとした場合、それは

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! MyCustomTableViewCell 

    return cell 
} 

で正常に動作します「致命的なエラー:予期せぬことに、オプション値をアンラップしている間にnilが発生する」というメッセージが表示され、カスタムセル内のUILabelsが「致命的なエラーの原因となるもの」として表示されます。

私はカスタムセルを登録するときに間違っているのですか、再利用のためにカスタムセルを登録しないといけないのですか?

+1

登録済みのセル識別子はストーリーボードでもありますか? –

+0

テーブルのセルを手動で登録する必要があるのは、セルがストーリーボード内ではなくxibファイル内に定義されている場合や、完全にプログラムセルがある場合だけです。 –

+0

クラスを介してセルを登録する場合は、すべてのサブビュー自体を作成する必要があります。ストーリーボードやペン先から読み込まれたものはありません。 @ TusharSharma:クラスでの登録はストーリーボードとは関係ありません。 – clemens

答えて

0

はい、それはあなたが使用しない場合:あなたの例では

tableView.dequeueReusableCell(withIdentifier: 

、それはあなたがあなたのストーリーボードにプロトタイプセルにカスタム識別子を追加している可能ですか?それはなぜ手動で登録せずに動作するのか説明します。デキューできるようにカスタムセルを登録する必要があり、いずれのアプローチも機能します。あなたは両方を必要としません。

これが不明な場合は、詳細を入力してください。私は私の答えを更新することを嬉しく思うでしょう。

+0

ああ、私はストーリーボードのプロトタイプセルに識別子を追加しました。私はセルを登録することを知らなかった。明確にしてくれてありがとう! –

+0

はい、それは明らかではありません。しかし、システムはあなたのセルを見つける方法を必要とし、AppleはIBとプログラム的なアプローチを提供します。 – Mozahler

関連する問題