2016-07-21 3 views
1

моей структуру данных образец ..Как передать данные через представление таблицы

Sports 
     Bat-and-ball 
      Baseball 
      Softball 
      Cricket 
     Hockey 
      Field Hockey 
      Ice Hockey 
      Roller Hockey 
    Engineering 
     Computer Science 
      Software Engineer 
      Electrical Engineer 

Здесь у меня есть три уровня данных, как вы можете видеть. но по умолчанию в tableview он обеспечивает только до 2 уровня. как я могу отобразить данные третьего уровня. Я могу показать только данные первого уровня в разделах и данных второго уровня в строках с помощью customcell. теперь, где отображать данные третьего уровня. так что я могу итерацию на основе количества строк ..

мой экран должен быть таким ..

enter image description here

ответ

2

Есть много способов сделать это.

Я расскажу о них позже. Но сначала вы можете подумать о том, является ли это хорошим пользовательским интерфейсом для отображения трех уровней данных в одном представлении таблицы. Пользователю может быть сложно перемещаться по нему.

Так что это некоторые варианты.

  1. Показать данные верхнего уровня (давайте называть его категории) в селекторе (раскрывающийся), а затем в виде таблицы только два уровня (разделы и строки) для выбранной категории. Вот пример такой точки зрения ниспадающего: https://github.com/PhamBaTho/BTNavigationDropdownMenu

  2. Если вам действительно нужно, чтобы показать список с 3 уровнями данных вы можете иметь вид таблицы, который будет показывать данные верхнего уровня в качестве секции и второго уровня как строка. Для каждой строки соответствующая ячейка будет содержать внутри табличного представления (или может быть только представление стека), показывающее только строки для 3-го уровня.

+0

но мое требование только этот. Я взял прототип 2 клеток. один для отображения данных раздела как 1-й уровень. на этом я положил кнопку для ее расширения. а затем во 2-й ячейке прототипа я теперь показываю данные второго уровня. но после расширения 2-го и 3-го уровней должен был когда-то встать на свою итерацию –

+0

Можете ли вы опубликовать скриншоты или издеваться над вами, как это должно выглядеть? То, что вы здесь описываете, отличается от того, что вы задали в своем вопросе. – fiks

+0

только я изменил данные json ничего больше. Пожалуйста, посмотрите этот экран там..http: //stackoverflow.com/questions/38460986 –

0

вы можете добавить таблицу в пользовательскую ячейку, и данные второго и третьего уровня могут отображаться на этой внутренней таблице.

+0

ok, тогда как 2-й и 3-й уровни будут относиться к 1-му уровню. Я имею в виду подсчеты. если у вас есть какой-либо образец, пожалуйста, пришлите –

+0

в пользовательскую ячейку, вы просто передаете массив другому массиву ячеек в ячейке для метода метода rowVitals.count> 0 { cell.datatitleArray = dictionarydata [0] as! NSArray cell.dateArray = dictionarydata [1] as! NSArray } –

0

Этот код отлично работает на моем устройстве.

Раскадровки enter image description here

TableViewController1

import UIKit 

class TableViewController1: UITableViewController { 

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


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    cell.textLabel?.text = group1[indexPath.row].title 

    return cell 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "segue1" { 

     let indexPaths = self.tableView!.indexPathsForSelectedRows! 
     let indexPath = indexPaths[0] as NSIndexPath 

     let vc = segue.destinationViewController as! TableViewController2 
     vc.currentGroup = group1[indexPath.row].title 

    } 
} 
} 

TableViewController2

import UIKit 

class TableViewController2: UITableViewController { 

var currentGroup: String? 
var filteredData = [Data]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    for data in group2 { 

     if data.group == currentGroup { 
      filteredData.append(data) 
     } 

    } 
} 

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    cell.textLabel?.text = filteredData[indexPath.row].title 

    return cell 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "segue2" { 

     let indexPaths = self.tableView!.indexPathsForSelectedRows! 
     let indexPath = indexPaths[0] as NSIndexPath 

     let vc = segue.destinationViewController as! TableViewController3 
     vc.currentGroup = group2[indexPath.row].title 

    } 
} 
} 

TableViewController3

import UIKit 

class TableViewController3: UITableViewController { 

var currentGroup: String? 
var filteredData = [Data]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    for data in group3 { 

     if data.group == currentGroup { 
      filteredData.append(data) 
     } 

    } 
} 

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    cell.textLabel?.text = filteredData[indexPath.row].title 

    return cell 
} 

} 

Класс данных

import Foundation 

class Data { 

var title: String 
var group: String? 

init (title: String, group: String?) { 
    self.title = title 
    self.group = group 
} 
} 

let group1 = [Data(title: "Sport", group: nil), Data(title: "Engineering", group: nil)] 
let group2 = [Data(title: "Hockey", group: "Sport"), Data(title: "CS", group: "Engineering")] 
let group3 = [Data(title: "Ice Hockey", group: "Hockey"), Data(title: "Software Engineer", group: "CS")] 

P.S. Я ненавижу усложнять ситуацию.

Счастливый взлом!

+0

, но я взял внутренний просмотр таблицы внутри пользовательской ячейки. так что здесь нет никакого выхода. мое требование - взять все данные в одном представлении таблицы. а не три разных таблицы, соединенных через segue. –

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