2017-03-20 57 views
0

我有一個問題,我想顯示一個tableview,但在各部分由每個項目的「狀態」分隔。我知道如何用一個簡單的字符串數組做到這一點,但我不能做一個類(Aluno)陣列這項工作,這是我到目前爲止的代碼:UITableView不顯示所有部分

import UIKit 

class DeliveriesTVC: UITableViewController { 

    let sections = ["Delivered", "Not Delivered"] 
    var studentList: [Array<Student>] = [[], []] 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     for i in 0...5{ 
      studentList[0].append(Student(alunoNome: "Aluno \(i)", alunoImg: "dani_test", alunoStatus: "Delivered")) 
     } 

     for i in 6...10{ 
      studentList[1].append(Student(alunoNome: "Aluno \(i)", alunoImg: "dani_test", alunoStatus: "Not Delivered")) 

     } 

     self.title = "Deliveries" 
    } 

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

     if let cellEntrega = tableView.dequeueReusableCell(withIdentifier: "EntregaCell", for: indexPath) as? EntregaCell { 

      let entregaCell = studentList[indexPath.section][indexPath.row] 

      // here i call a function in my TableViewCell class that update the cell itself 
      cellEntrega.updateAlunoUI(Aluno: entregaCell) 

      return cellEntrega 

     } else { 
      return UITableViewCell() 
     } 
    } 


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return listaAlunos[section].count 
} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return self.sections[section] 
} 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 2 
    } 
} 

在輸出中,我只是得到即使在我設置每個部分的名稱和部分的數量的情況下,「第一部分」也顯示並且沒有名字。我到處尋找,但我找不到解決方案。

+0

你真的需要弄清楚你的數據源。你的'cellForRowAt'基於一個名爲'studentList'的數組。你的'numberOfRowsInSection'基於一個名爲'listaAlunos'的數組(可能是一個翻譯監督)。你的'titleForHeaderInSection'是基於另一個名爲'sections'的數組。而且你不必要地使用'2'來硬編碼'numberOfSections'。不要那麼難。 – rmaddy

+0

是的,這是一個翻譯問題,他們實際上是一樣的,對不起!我也硬編碼了部分的數量,因爲我真的嘗試了所有的東西,最後我的問題是錯誤的功能,我不知道。謝謝您的幫助! –

回答

0

numberOfSectionstitleForHeader方法是錯誤的,應該是

override func numberOfSections(in tableView: UITableView) -> Int { 

    return 2 
} 

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

    return self.sections[section] 
} 

另外,你應該返回self.sections.count而不是return 2numberOfSections被硬編碼,因爲如果您將另一個對象添加到數組中,則必須將2更改爲該數組現在具有的任何元素。

+0

非常感謝!爲我工作! –

0
  1. 爲了您numberOfSectionInTableView功能,應該不會是
    override func numberOfSectionsInTableView(in tableView: UITableView) -> Int { return 2 }
    與在tableView: UITableView面前in

  2. 我看不到你連接你的UITableView的地方delegatedatasource

Here是一個教程,向您展示如何使用UITableView。

看看「基本表視圖」 - 「第3步:設置數據源,並委託」

+0

你不需要在'UITableViewController'中設置委託和數據源。 – Rikh

+0

你是對的。不知何故,我認爲它在'UIViewController'中。 –

相關問題