2016-04-03 9 views
1

UITableviewで、セクションと異なる行タイプ(shown here)で構成される画面を作成しようとしています。問題は、FrequencyセルのDetailラベルの値を変更しようとすると、get-onlyプロパティだと言います。フリークエンシーセルは、ストーリーボードに「Right Detail」と入力するように設定されています。UITableViewCellの詳細ラベルを設定できません

私のコードは次のとおりです。また

let frequencyCellID = "frequencyCell" 
    let decksCellID = "decksCell" 
    let pickerCellID = "pickerCell" 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell? 

    switch (indexPath.section,indexPath.row){ 
    case (0,0): cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID) 
     //line below shows error 
     cell?.detailTextLabel? = "test" 
    case (0,1): cell = tableView.dequeueReusableCellWithIdentifier(pickerCellID) 
    case (1,0): cell = tableView.dequeueReusableCellWithIdentifier(decksCellID) 
     cell?.detailTextLabel? = "test" 
    default: break 
    } 
    return cell! 

、どのように私は最後の行のセルをアンラップ力を避けることができますか?私は空のTableViewCellを初期化しようとしましたが、空の初期化子がないようです。

答えて

0

まず第一に、あなたはこのようなテーブルビューからセルを要求する必要があります

let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath: indexPath) 

あり、追加indexPathパラメータがありますが、この方法は、非オプションのUITableViewCellインスタンスを返すことが保証されます。これは、あなたのセルインスタンスを非オプションにもします。したがって、あなたはそれをアンラップする必要はありません。これらの2つの方法の違いについては、そこに多くの情報があります。

もう1つ問題があります:detailTextLabelはUILabelインスタンスなので、内容をtextプロパティで設定する必要があります。このように:エラーのある行で

cell.detailTextLabel?.text = "test" 
+0

よろしいですか、テキストラベルの問題で間違いがあります。しかし、スイッチ内のindexpath引数に入れることをお勧めしますか? –

+0

は 'tableView(tableView:UITableView、cellForRowAtIndexPath indexPath:NSIndexPath)'の引数として受け取ったindexPathを渡すだけです。最初のスイッチケースの行を 'cell = tableView.dequeueReusableCellWithReuseIdentifier(frequencyCellID、forIndexPath:indexPath)'に置き換えてコンパイルして実行します。 – xinatanil

+0

ありがとう、ありがとう:) 私たちはそれを見ている間に、独自のクラスを持つピッカービューに基づいて詳細ラベルを更新したいと思います。 'pickerView:didSelectRow'で変更された' UITableView'か 'UIPickerView'の中にグローバル変数を作成すべきでしょうか? –

0

、あなたはUILabel?なくStringのインスタンスであるcell?.detailTextLabel?からStringを割り当てています。ラベルのテキストにStringを割り当てるには、cell?.detailTextLabel?.text = "test"を実行します。

また、detailTextLabel?プロパティはreadonlyです。これは、残念ながら自分のUILabel?インスタンスを割り当てることができないことを意味します。しかし、あなたができることは、好きなようにそれをカスタマイズするために必要なプロパティが設定されています。あなたはセルをアンラップについては

などcell?.detailTextLabel?.backgroundColor =またはcell?.detailTextLabel?.font =を行うことができますので、あなたは、オプションを返さない

let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath:indexPath) 

このメソッドを使用してセルを取得する必要があります。

+0

残念ながら 'cellForRowAtIndexPath'はオプションを返しません。 –

+0

'cellForRowAtIndexPath'はオプションではなく、返されるnilはコンパイル時エラーとして報告されます。 – xinatanil

+0

良い点。答えを編集しました。 – Hash88

関連する問題