2017-04-02 10 views
0

私は、CustomCellOneとCustomCellTwoの2つのクラスを使用するtableViewを持っています。 CustomCellTwoはindexPath.row == 1に表示され、残りの時間はCustomCellOneが表示されます。Swift:複数のTableViewCellクラスを使用する場合、tableViewのインデックスをオフセットする方法はありますか?

CustomCellOneは、tableArrayという配列のデータを表示します。ただし、CustomCellTwo後のセルは、配列内の2番目の項目が表内のCustomCellTwoに置き換えられるため、配列から1つの要素が欠落しています。

私が現在考えることのできる唯一の解決策は、indexPath1としてtableArrayに冗長要素を追加することです。これはスキップされますが、エレガントではありません。

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

    if indexPath.row == 1 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cellTwo", for: indexPath) as! CustomCellTwo 

     cell.label.text = "" 
     return cell 
    } else { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellOne, for: indexPath) as! CustomCellOne 

    cell.label.text = tableArray[indexPath.row] 
    return cell 
} 

答えて

1

1より大きい場合は、インデックスを下げてください。あなたはrow値を導入することでこれを行い、その後、必要に応じてそれを調整することができます。

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

    if indexPath.row == 1 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cellTwo", for: indexPath) as! CustomCellTwo 

     cell.label.text = "" 
     return cell 
    } else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: cellOne, for: indexPath) as! CustomCellOne 
     let row = indexPath.row < 1 ? 0 : indexPath.row - 1 
     cell.label.text = tableArray[row] 
     return cell 
    } 
} 

注:あなたが行1で挿入されたセルを考慮するために、セクション0の行数としてtableArray.count + 1を返す必要があります。

関連する問題