2015-04-19 1 views
6

Я не мог найти лучшего способа сделать это. Я сопоставляю все свойства объекта-ученика в двумерном массиве. Так что у моего телевизора есть разделы.Объект карты в 2D-массив Swift для разделов TableView

Я тоже не могу использовать статический стол, если эта проблема не существует.

Так что мой код в ТВЦ

let currentUser = PFUser.currentUser()! as! MyUser 

var membershipSection:[[String:String]]! 
var detailsSection:[[String:String]]! 
var emergancySection:[[String:String]]! 
var medicalSection:[[String:String]]! 

var titlesForSection = ["MEMBERSHIP", "DETAILS", "EMERGANCY CONTACT", "MEDICAL HISTORY"] 

var combo = [[[String:String]]]() // Data Source for TableView 

// Следующий вызывается из ViewDidLoad

func loadDisplayDataSource() { 

    combo.removeAll(keepCapacity: true) 

    var idString = "Awaiting ID Generation" 

    if student.objectId != nil { 
     idString = student.objectId! 
    } 

    membershipSection = [["Sessions":student.sessionsRemaining], ["Details":""], ["ID":idString]] 
    detailsSection = [["First Name":student.firstName], ["Last Name":student.lastName], ["DOB":""], ["Address":""], ["Phone":""], ["Email":student.email], ["Occupation":""]] 
    emergancySection = [["Name":""], ["Phone":""]] 
    medicalSection = [["Recent Surgery":""], ["Hypertension":""], ["Diabetes":""], ["Caradic":""], ["Epilesy":""], ["Syncope":""], ["Medications":""], ["Medical Details":""], ["Other Injuries":""]] 

    combo.append(membershipSection) 
    combo.append(detailsSection) 
    combo.append(emergancySection) 
    combo.append(medicalSection) 

    self.tableView.beginUpdates() 
    var range = NSMakeRange(0, self.numberOfSectionsInTableView(self.tableView)) 
    var sections = NSIndexSet(indexesInRange: range) 
    self.tableView.deleteSections(sections, withRowAnimation: UITableViewRowAnimation.None) 
    self.tableView.insertSections(sections, withRowAnimation: UITableViewRowAnimation.Fade) 
    self.tableView.endUpdates() 
} 

Есть ли лучший способ отображения данных, объект в в секции? То, как я это делаю, работает, но немного запутанно. Если бы я мог использовать статический вид, это было бы проще, но я не могу использовать drop в телевизоре в Normal VC, и вы не можете использовать статическое телевидение в них. Что раздражает! Есть ли более чистый способ?

Могу ли я сделать это более SWIFTY - лучший способ создать свой комбо-источник данных.

Спасибо за любой совет.

Мой конечный результат, который работает, выглядит следующим образом: - TVC с секциями.

enter image description here

+0

Вы используете 'Core Data' каким-то образом, чтобы получить ваши данные? – Kutyel

+0

Нет, использование Parse – DogCoffee

ответ

1

Я не совсем уверен, что вы просите. Для чего используется «комбо»?

Если вы хотите просто скомпоновать свои данные чище, структуры в Swift хороши для этого. Что-то вроде:

struct EmergencySection{ 
    var name: String! 
    var phone: String! 
} 

//then to instantiate in loadDisplayDataSource 
var emergencySection = EmergencySection(name: "", phone: "") 
combo.append(emergencySection) 
+0

combo - это то, что использует tableview в своем источнике данных. Но да, я согласен, структура очистит все. – DogCoffee

0

Вот как я это делаю, немного чище

private struct Details { 

    static let title = "DETAILS" 
    static let firstName = (key:"First Name", index:0) 
    static let lastName = (key:"Last Name", index:1) 
    static let dob = (key:"DOB", index:2) 
    static let address = (key:"Address", index:3) 
    static let phone = (key:"Phone", index:4) 
    static let email = (key:"Email", index:5) 
    static let occupation = (key:"Occupation", index:6) 

    static func splitIntoDictionaries(student: Student) -> [[String:String]] { 
     return [ 
      [firstName.key:student.firstName], // 0 
      [lastName.key:student.lastName], // 1 
      [dob.key:""], 
      [address.key:""], 
      [phone.key:""], 
      [email.key:student.email], 
      [occupation.key:""] 
     ] 
    } 
} 
0

Попробуйте использовать RETableViewManager, это довольно удивительным для таких задач. Ну, это полностью Objective-C, но, по крайней мере, вы могли бы быстро взглянуть на него.

0

Как насчет этого?

import UIKit 

class 
ViewController: UITableViewController { 

    var combo = [ [ String: AnyObject? ] ]() 
    let titlesForSection = ["MEMBERSHIP", "DETAILS", "EMERGANCY CONTACT", "MEDICAL HISTORY"] 

    override func 
    viewDidLoad() { 
     super.viewDidLoad() 


     // Something about studen data 


     combo = [ 
      [ "Sessions":"student.sessionsRemaining", "Details":"", "ID":"idString" ] 
     , [ "First Name":"student.firstName", "Last Name":"student.lastName", "DOB":"", "Address":"", "Phone":"", "Email":"student.email", "Occupation":"" ] 
     , [ "Name":"", "Phone":"" ] 
     , [ "Recent Surgery":"", "Hypertension":"", "Diabetes":"", "Caradic":"", "Epilesy":"", "Syncope":"", "Medications":"", "Medical Details":"", "Other Injuries":"" ] 
     ] 
    } 

    override func 
    numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return combo.count 
    } 

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

    override func 
    tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return titlesForSection[ section ] 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let v = tableView.dequeueReusableCellWithIdentifier("SomeIdentifier") as! UITableViewCell 
     let w = combo[ indexPath.section ] 
     let wKey = Array(w.keys)[ indexPath.row ] 
     v.textLabel!.text = wKey 
     v.detailTextLabel!.text = w[ wKey ] as? String 
     return v 
    } 
} 
+0

Основная проблема - создать комбо, я обновлю то, что я сейчас использую в своем ответе. Массивный дикт. просто беспорядочно – DogCoffee

0

Вы можете использовать UITableViewController со статическими клеток в нормальной UIViewController, добавив его в качестве контроллера зрения ребенка.

parentVC.addChildViewController(childVC) 
childVC.view.frame = parentVC.view.bounds 
parentVC.view.addSubview(childVC.view) 
childVC.didMoveToParentViewController(parentVC) 
+0

интересно, я видел различные способы сделать это, но не этот метод. Обязательно попробуй в какой-то момент. – DogCoffee

+0

Пробовал это, но вы не можете расположить статические ячейки в раскадровке? – DogCoffee

+0

Если вы добавите 'UITableView' в' UIViewController', то да, вы не сможете добавить статические ячейки. Мое решение состоит в том, чтобы создать «UITableViewController» со статическими ячейками, это работает в раскадровке, а затем встроить его в 'UIViewController' в качестве контроллера детского представления. – pteofil

Смежные вопросы