2017-03-25 13 views
0

テーブルにラベルを配置しようとしましたが、これまで見たことのないエラーが発生しました。他の人は不動産のエラーの質問に割り当てることができません私は私の状況だとここに質問を投稿すると一致するように見えない。私はスタックオーバーフローで学んでいるので、すべてのポインタは本当に感謝されます。ありがとう!値に代入できません:関数呼び出しは不変の値を返します

cell.contentView.viewWithTag(1) = newData[indexPath.row] 

2つの問題:

import UIKit 

class SeventhViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return 15 

} 

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell 

    var newData = [String]() 

    newData = ["Impressions","Image Tapped","Description Tapped","Biography Tapped","Purchase Link Tapped","Added to Collection","Removed from Collection"] 

    //Programmatically create label 
    var impressionsLabel = UILabel(frame: CGRect(x: 280.0, y: 14.0, width: 300.0, height: 30.0)) 
    impressionsLabel.text = newData[indexPath.row] 
    impressionsLabel.tag = 1 
    impressionsLabel.font = UIFont(name: "Impressions", size: 17.0) 

    impressionsLabel.textColor = UIColor.darkGray 

    cell.addSubview(impressionsLabel) 
    **cell.contentView.viewWithTag(1) = newData[indexPath.row]** 
    impressionsLabel.tag = 1 

    return cell 

答えて

0

エラーが行です。 viewWithTagはオプションのUIViewを返します。 UIViewStringを割り当てようとします。

タグ1とビューがUILabelであると仮定すると、あなたはこのようなものが必要です。

if let label = cell.contentView.viewWithTag(1) as? UILabel { 
    label.text = newData[indexPath.row] 
} 

をこれが安全に、おそらく皆無ビューへのアクセスを扱う(1のタグが付けられた実際のビューがありません包み)とそのビューをUILabelにキャストしようとしています(ビューは実際にはUILabelではありません)。これらの条件が満たされ、実際にラベルを取得した場合は、ラベルのtextプロパティを設定します。

あなたのアプリを実行すると新しい問題が発生しますが、cellForRowAtメソッドでデータ配列を宣言して設定することは意味がなく、特定のカウントをハードコードするのは意味がありませんあなたのnumberOfRowsInSectionメソッド。

適切なことは、newDataをビューコントローラのプロパティにして、セルにアクセスするたびにではなく1回設定することです。そして、そのカウントをnumberOfRowsInSectionに返します。

+0

包括的な回答ありがとうございます。私の間違いはすぐに解消されました。今度は、 'newData'をプロパティにするだけでいいのです。 –

関連する問題