2017-08-01 9 views
0

私はUITableViewの最初の行をカスタマイズしようとしています。SWIFTでUITableviewの最初の行をカスタマイズする

ショップのショップ名とロゴを持つAPIからJSONのデータを取得します。 5店舗は設計された背景を持ち、上部の他のセルよりも大きくなることがあります。

は、配列内の背景デザインのお店を追加

彼らは他のお店の前に最初に表示されます

私は店がデザインをしていますが、私はまだcouldntの何をすべきかである場合にはJSONをループし、確認することができますデザインなし。ここで

は、私は次の2つのセルを使用してあなたのテーブルビューで

enter image description here

shops without

+4

次の2つのセルを使用して使用されるべきセルをチェックするために、データの2種類のフラグを設定することができます。 –

+0

もっと説明できますか?あなたはコードで正確に何が必要ですか? –

答えて

1

すべてのショップクラスは次のように、背景画像付きオプションのプロパティを持っている必要がありますの初:

class Shop { 
    ... 
    var backgroundImage: UIImage? 
    ... 
} 

のみそれらの5店舗は、残りの部分のために、背景画像を持っていますbackgroundImage = nil

のは、お店の配列をフィルタリングし、それが順序だ再配置から始めましょう、あなたはフェッチ持っていると、サーバーからのデータをシリアライズと仮定:

//"fetchedShops" is array of serialized shops: [Shop]() 
let shopsWithBackgroundImage = fetchedShops.filter({ $0.backgroundImg != nil }) 
let showWithNoImage = shops.filter({ $0.backgroundImg == nil } 
let allShops = shopsWithBackgroundImage + showWithNoImage 

、あなたは(XIBsとして、または2つの異なるカスタムセルを作成する必要がありますストーリーボード) - バックグラウンドとそれ以外のもの。 その後、ちょうどこのようcellForRowAtIndexPathを実装:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
let shop = allShops[indexPath.row] 
if shop.backgroundImage != nil { 
    //"shop" has background image - use custom cell with background image 
    let cell = tableView.dequeueReusableCell(withReuseIdentifier: cellWithBackgroundImageID, for: indexPath) as! CellWithBackground 
    cell.backgroundImageView.image = shop.backgroundImage 

    //other cell's config 

    return cell 
} 
//"shop" has no backgroundImage - let's use normal cell 
let cell = tableView.dequeueReusableCell(withReuseIdentifier: normalShopCellID, for: indexPath) as! NormalShopCell 

//other cell's config 

return cell 
} 

はそれが役に立てば幸い:)

+0

ありがとう! 'numberOfRowsInSection'についてどうですか?私はすべてのお店の数を返す必要がありますか? – leo0019

+0

@ leo0019これは必ずしも必要な方法ではありません –

+0

どういう意味ですか? – leo0019

1

を行うことを計画しています何の画像です。この2つのセルでは、1つのセルが大きくなり、必要に応じて背景イメージが設定されます。 2番目のセルで小さいセルを使用します。次に、cellForRowAtIndexPath方法でデザインの店をチェックします。 Shopのデザインが真であれば、関数のelse部分でFirst Cellその他を呼び出します。

サンプルコード...

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if self.design[indexPath.row] == true { 
     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "firstCustomCell") 
     //set the data here 
     return cell 
    } 
    else { 
     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "thirdCustomCell") 
     //set the data here 
     return cell 
    } 
} 
+0

デザインが空の配列の場合はどうなりますか? – leo0019

+0

@ leo0019 JSONからの回答を受け取ったら、ショップデザインを追加します。あなたが店のデザインからの応答を得るならば、他の賢い賢い偽にしてください –

関連する問題