2017-03-03 35 views
0

Xcodeバージョン8.2.1(8C1002)を使用していますので、Swift 3はデフォルト以外のセルでテーブルビューを作成しようとしていますセルdetailTextLabelまたはセルimageViewをnil以外にする。detailTextLabelとimageViewはテーブルビューのセルにアクセスできません

ユニバーサルデバイスでプロジェクトの展開ターゲットを9.0に設定しました。

インタフェースビルダーでは、1プロトタイプセルでダイナミックプロトタイプとしてコンテンツを確立しました。

インターフェイスビルダーで、私は、画像 "animal08.png"と識別子 "PlayerCell"を使用して、そのテーブルビューのセルスタイルを "正しい詳細"に設定しました。 viewDidLoad(FUNCオーバーライドのテーブルビューのビュー・コントローラ)で

self.tableView.register(UITableViewCell.self、forCellReuseIdentifier: "PlayerCell")

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "PlayerCell")! 
    print(cell.subviews.count) 
    cell.textLabel!.text = "Name: " + myNames[indexPath.row] 
    cell.detailTextLabel!.text = "Ranking: " + myRankings[indexPath.row].description 
    let avatarIndex = indexPath.row + 1 
    let avatarIndexName = "animal0" + avatarIndex.description 
    cell.imageView!.image = UIImage.init(named: avatarIndexName) 

    return cell; 
} 

私はiPhone 5のiOS 5.2(13C75)シミュレータ上でプログラムを実行すると、私は「cell.detailTextLabelの.textステートメントに到達したとき、私が取得:!

「致命的なエラー:予期せず、オプション値をアンラッピングしている間にゼロが見つかりました」

同様に、imageViewプロパティにアクセスしようとするとnilが検出されます。

print(cell.subviews.count)ステートメントは、セルのサブビューが1つしかないことを示しています。 インターフェイスビルダやinit(スタイル:UITableViewCellStyle、reuseIdentifier:String?)イニシャライザ以外で、UITableViewCellのセットがないか、UITableViewCellStyleプロパティを取得できます。

私は、initメソッドを使用するとdequeueReusableCellの利点が無効になると思います。この状況では使用しないでください。

私はtableview.registerメソッドがtableViewCellStyleをデフォルトにリセットしていることを実証していません。

上記のコードは、Apple Developerサイトの定型コードや、寄稿者の幅広いチュートリアルと同じようです。

したがって、どのようにしてdetailTextLabelおよびimageViewサブビューにアクセスしてデキューされたセルを使用できますか?

+0

イメージビューと2つのラベルを持つカスタムテーブルビューセルを作成するか、uitableviewcellのスタイルを変更する –

+0

"詳細表示"テーブルビューセルには詳細テキストラベルがありません。右の詳細項目を設定することはできません(あなたが上のコードで行ったようにイメージビューを設定すると、左にあるこのconfitではない)イメージビューを設定します。@ Fahadはカスタムを作成するテーブルビューセル。 – HAS

答えて

0

セルスタイルをUITableViewCellStyleDefault以外の値に変更する必要があります。 AFAIKでは、アンラッピングは必要ありません。 UITableViewCell追加する必要があります(デフォルトのサブビューがある)にあなたのすべてのサブビューとして任意の使用可能な値を与えることはありませんcell.subviews.countを印刷ところで

その-contentView(セルプロパティの内部:あなたがしようと他のものについては

)。

また、-initWithStyle:reuseIdentifier:を使用して初期化されたセルには、再利用メカニズムを使用すると同時に必要なセルスタイルを指定する可能性があるため、余分な欠点はありません。ストーリーボードで定義されたセルをInterface Builderで指定された属性で再利用すると、デキューは実際にはより意味があります。

+0

まあ、私はちょうどスウィフト遊び場でテストしてみたコードは '.default'スタイルを含めていないコードのクラッシュで、すべての可能なセルスタイルにはかなりうまく動作します。 ' ''輸入のUIKit 輸入PlaygroundSupport let c = UITableViewCell(style:.value2、 reuseIdentifier:??ゼロ) c.backgroundColor = UIColor.white c.textLabelの.text = "テキスト" c.detailTextLabelの.text = "詳細" PlaygroundPage.current.liveView = c''' – michi

関連する問題