1.- Организуйте свои данные в хорошей манере, возможно, в виде графика, дерева или просто списков, связанных со всеми вашими данными.
2.- Для простоты выполняет функции, которые дадут вам соответствующие данные для каждого вида таблицы. Позволяет сказать:
func getModels(make: Makes) -> [Model]
func getYears(model: Model) -> [Years]
или просто
func getModels(make: String) -> [String]
func getYears(model: String) -> [String]
также некоторые вспомогательные функции, которые позволяют реализовать любую структуру данных позади, так же, как, например:
func getMaker(int:Int) -> Maker?
или func getMaker(int: Int) -> String?
3.- Вы должны сохранить в памяти, какие из ваших возможных производителей и моделей были выбраны, на данный момент, :
var selectedMaker: String?
var selectedModel: String?
4.- Я предполагаю, что вы будете иметь все ваши UITableViews
в том же UIViewController
или UITableViewController
, так что вам нужно будет решить, соответствующие данные, чтобы показать каждый. Для этого вам нужно будет различать каждый из них, как показать, с тегами, равенством экземпляра и т. Д. Я предлагаю для более поздней читаемости и возможности использования в конечном итоге иметь функцию, которая вернет число? возможно, соответствует таблице. За это объяснение, позвольте называть его func whichTableIsThis(tableView: UITableView) -> Int?
5.- Ваши делегаты должны работать по-разному для каждого из этих таблиц. Здесь мы будем использовать нашу новую функцию, которая должна возвращать 1, 2 или 3 .., если этот табличный вид не является одним из них. :)
extension YourViewControlerWithTableViews: UITableViewDelegate, UITableViewDataSource {
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//I'm assuming you will have only one cell, lets call it `AttributesTableViewCell`
var cell = tableView.dequeueReusableCellWithIdentifier("yourCellName", forIndexPath: indexPath) as! AttributesTableViewCell
cell.attributeValue.text = ""
if let tableNumber = whichTableIsThis(tableView) {
//here you will be checking for every of your tree cases, for this example I will check just for Models
//OK, so tableNumber returned 2
if tableNumber == 2 && selectedMaker != nil{
let value = getModels(selectedMaker!)[indexPath.row]
cell.attributeValue.text = value
}
//...
}
return cell
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let tableNumber = whichTableIsThis(tableView) {
//here you will be checking for every of your tree cases, for this example I will check just for Models
//OK, so tableNumber returned 2
if tableNumber == 2 && selectedMaker != nil{
return getModels(selectedMaker!).count
}
//...
}
return 0
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let tableNumber = whichTableIsThis(tableView) {
//here you will be checking for every of your tree cases, for this example I will check just for Maker
//OK, so tableNumber returned 1
if tableNumber == 1 {
selectedMaker = getMaker(indexPath.row)
//Here you must refresh data for your next tables in hierarchy, to allow them to refresh with new data
selectedModel = nil
selectedYear = nil
tableview2.reloadData()
tableview3.reloadData()
}
//...
}
}
}
И .. Это должно быть все. Надеюсь, поможет!
Я не понимаю? Почему бы вам не организовать данные, FirsTableView for Makes, SecondTableView для моделей на основе ячейки, выбранных для пользователя в первом SecondTableView, и третий для Year, основанный на модели, выбранной в SecondTableView? –