OStack程序员社区-中国程序员成长平台

标题: ios - 如何将 UITableView 链接到另一个 UITableView [打印本页]

作者: 菜鸟教程小白    时间: 2022-10-22 09:02
标题: ios - 如何将 UITableView 链接到另一个 UITableView

我目前正在使用 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-推荐答案


    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同时UIViewControllerUITableViewController ,因此您需要决定相应的数据显示给每个人。
    为此,您需要区分每个人,如何显示,标签,实例相等性等。我建议以后的可读性和使用便利性最终拥有一个将返回数字的函数?也许,对应于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/






    欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4