2017-12-26 16 views
0

既存のリストにセクションを追加することはできますか?それとも何とかハードコーディングできますか?だから、その行3と4は、セクションで区切られ、行9と10は部分によって分離されているので、
に私はセクションを追加しようとしましたが、それは非常に成功しませんでした:テーブルビューのセクションを既存のリストに追加しますか?

リストファイル:

import Foundation 

class ListItem { 
    var section = "" 
    var listItem = "" 
    var description = "" 
    var extraInfo = "" 
    var counter: Int = 0 

    init(section: String, listItem: String, description: String, ekstraInfo: String) { 
     self.section = section 
     self.listItem = listItem 
     self. description = description 
     self.ekstraInfo = ekstraInfo 
    } 
}  

ビューコントローラ:

let staticList: [ListItem] = 
    [ 

     ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"), 
     ListItem(section: "Section 2", listItem: "Apples", description: "Red", ekstraInfo: "Round"), 
     ListItem(section: "Section 3", listItem: "Strawberries", description: "Red", ekstraInfo: ""), 
     ListItem(section: "Section 4", listItem: "Carrots", description: "Orange", ekstraInfo: ""), 
     ListItem(section: "Section 5", listItem: "Lime", description: "Green", ekstraInfo: "Round"), 
    ]  

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
    { 
     if (tableView == MainTableView) 
     { 
      return staticList[section].section 
     }else 
     { 
      return nil 
     } 
    }  

EDIT:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell: UITableViewCell 
      cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell", for: indexPath) 

      if let customCell = cell as? MenuCell 
      { 
       let itemIndex = indexPath.row 
       let listItem = staticList[itemIndex] 

       customCell.itemLabel.text = listItem.listItem 
       customCell.descriptionLabel.text = listItem.description 
       customCell.exstraInfoLabel.text = listItem.exstraInfo 
       customCell.counterLabel.text = "\(listItem.counter)" 

       customCell.delegate = self 


      } 
      return cell 

     } 
    } 
+0

静的リストを '[[ListItem]]'の配列として簡単に書式設定することができます。それぞれの「セクション」はListItemの配列です... –

答えて

1

いくつかのハードコードされたセクションで例を共有します。これは、どのように動作するかを理解するのに役立ちます。

let numberOfRows = [2, 3, 1, 4, 5] 

ここでは、行数を示す整数配列があります。 2、3 ...それぞれのセクションの5行

と基本的には5つのセクションあなたのUITableViewDataSourceに以下を追加します。

func numberOfSections(in tableView: UITableView) -> Int { 
    return numberOfRows.count 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return numberOfRows[section] 
} 

これはあなたに2を持つUITableView 5とセクション、3、1を与える必要があり、各セクションに4,5行。

など、複数のセクションを得るためnumberOfRowsと複数の行の周り再生

EDIT:staticListは1次元アレイであるので、各セクションが同じ細胞をロード

理由があります。したがって、各セクションでは、各セクションの0から始まるindexPath.rowとして同じ行がフェッチされ続けます。これを修正するには、staticListを2次元配列にします。ここではどのように...

let staticList: [[ListItem]] = [ 
    [ 
     ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"), 
     ListItem(section: "Section 1", listItem: "Apples", description: "Red", ekstraInfo: "Round") 
    ], 
    [ 
     ListItem(section: "Section 2", listItem: "Strawberries", description: "Red", ekstraInfo: "") 
    ], 
    [ 
     ListItem(section: "Section 3", listItem: "Carrots", description: "Orange", ekstraInfo: ""), 
     ListItem(section: "Section 3", listItem: "Lime", description: "Green", ekstraInfo: "Round") 
    ] 
] 

だ今staticListは、各セクションの2、1、2 ListItem sの3つのセクションをそれぞれ持っています。

最後に、cellForRowAtIndexPath関数の小さな変更を加える...

// let itemIndex = indexPath.row 
// let listItem = staticList[itemIndex] 

let listItem = staticList[indexPath.section][indexPath.row] 

ところで、あなたは物事をきれいにするためにListItemからsectionプロパティを削除することができます。それを残しても何も壊れてはいけません。

+0

ありがとうございます。これを試してみると、 'numberOfRows'と' numberOfRowsInSection'がうまく動作します。しかし、リストはすべてのセクションで始まります。私はここで何が欠けていますか?私は標準のプレーン配列でListItemを切り替えようとしました。しかし、それはまたすべてのセクションの始めに始まります。 – Eccles

+0

'cellForRowAtIndexPath'のコードを送ってもらえますか?私は問題がそこにあると思う。 – NSAdi

+0

質問を編集 – Eccles

関連する問題