我目前正在使用 swift 制作一个包含汽车信息的应用程序。 我正在使用 UITableView 对于品牌、型号、年份。
我想知道我是否可以拥有一个 UITableView 链接到另一个 UITableView 取决于用户输入,例如:
tableview 1(制作)
奥迪 本田 tableview 2(模型) 奥迪 -> A1、A2、A3........ 本田->思域、爵士... tableview 3(年) 奥迪 -> A3 -> 2005,2006,2007..... 本田 -> 思域 -> 2005,2006,2007.....
Code for tableview 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.Makes = [Make(name: "Audi"),Make(name: "Nissan"),Make(name: "Fiat"),Make(name: "Ford"),Make(name: "Honda"),Make(name: "Mercedes-Benz"),Make(name: "Lexus"),Make(name: "BMW"),Make(name: "Vauxhall"),Make(name: "VW")]
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.Makes.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
var make = Makes[indexPath.row]
cell.textLabel?.text = make.name
return cell
}
Best Answer-推荐答案 strong>
1.- 以良好的方式组织您的数据,可以是图表、树或简单地列出与您的所有数据相关的列表。
2.- 为简单起见,使函数可以为每个 tableview 提供相应的数据。 让我们说:
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 ,因此您需要决定相应的数据显示给每个人。 为此,您需要区分每个人,如何显示,标签,实例相等性等。我建议以后的可读性和使用便利性最终拥有一个将返回数字的函数?也许,对应于tableview。为了这个解释,我们称之为 func whichTableIsThis(tableView: UITableView) -> Int? 5.- 你的代表应该为每个表 View 工作。在这里,我们将使用我们全新的函数,如果此 tableview 不是其中之一,则必须返回 1、2 或 3 ..nil。
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()
}
//...
}
}
}
而且..应该就是全部了。希望能帮助到你!
关于ios - 如何将 UITableView 链接到另一个 UITableView,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/31860876/
|