2017-01-27 1 views
-4

J'ai un ViewController dans lequel j'ai 2 TextFields et une vue DatePicker lorsque je clique sur mon bouton Enregistrer Je veux utiliser la date que je choisi pour la section en-tête de mon TableviewController. Si d'autres objets suivre et ils ont la même date, ils devraient tous se regrouper dans la même section de date. Je ne suis pas en utilisant CoreData dans ce projet afin de proposer s'il vous plaît ne pas en utilisant la méthode qui fournit CoreData pour cette tâche. enter image description hereUITableViewCell séparateur en utilisant une date

+3

s'il vous plaît ajouter un peu de code, mettant en lumière le problème que vous ayez. – torinpitchers

Répondre

0

Voici une mise en œuvre simple, qui prend votre TableData et tient à jour une liste des dates uniques à utiliser comme têtes de section. Dans cet exemple, je Recréez les en-têtes à partir de zéro, mais dans une mise en œuvre réelle, vous pouvez mettre à jour à la place.

Je définis une struct pour mes données d'échantillons

struct SampleData 
{ 
    var date  = Date() 
    var textField1 = "" 
    var textField2 = "" 
} 

et a créé des données

var tableData : [SampleData] = [] 
var tableDataSectionHeaderData : [Date] = [] 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    tableData.append(SampleData(date: stringAsDate("Feb 13, 2017")!, textField1: "Title 1", textField2: "text2")) 
    tableData.append(SampleData(date: stringAsDate("Feb 13, 2017")!, textField1: "Title 2", textField2: "text2")) 
    tableData.append(SampleData(date: stringAsDate("Feb 14, 2017")!, textField1: "Title 3", textField2: "text2")) 
    // and so on... 

    createSectionHeaders() 
} 

func createSectionHeaders() 
{ 
    tableDataSectionHeaderData.removeAll() // in a realistic scenario, you would probably update this rather than recreating from scratch 
    for entry in tableData 
    { 
     if !tableDataSectionHeaderData.contains(entry.date) 
     { 
      tableDataSectionHeaderData.append(entry.date) 
     } 
    } 
} 

J'ai deux ou trois fonctions définies pour basculer entre la date et de chaîne.

est ici comment mettre en œuvre les méthodes tableView

extension ViewController : UITableViewDelegate, UITableViewDataSource 
{ 
    func numberOfSections(in tableView: UITableView) -> Int 
    { 
     return tableDataSectionHeaderData.count 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     let filteredData = tableData.filter{$0.date == tableDataSectionHeaderData[section]} 
     return filteredData.count 
    } 

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
    { 
     return dateAsString(tableDataSectionHeaderData[section]) 
    } 

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

     let filteredData = tableData.filter{$0.date == tableDataSectionHeaderData[indexPath.section]} 

     cell.textLabel?.text = "\(dateAsString(filteredData[indexPath.row].date)) \(filteredData[indexPath.row].textField1)" 

     return cell 
    } 
}