【问题标题】:Filtering 2nd and 3rd pickerviews based on selection from 1st using structs根据使用结构从第一个选择过滤第二个和第三个选择器视图
【发布时间】:2018-01-25 04:44:14
【问题描述】:

我搜索(并找到了一些使用静态数组),但找不到任何与我尝试使用 JSON 填充结构做的事情相关的内容。

我是 Swift 和 StackExchange 的新手,所以如果我错过了,请告诉我!

我从 JSON 代码中填充了三个结构。 注意:departmentName 与其他两个结构体中的 Department 相同

struct Dept: Decodable {
let departmentName: String 
}

struct Company: Decodable {
let companyName: String
let Department: String
}

struct Spread: Decodable {
let spreadName: String
let spreadType: String
let Department: String
}

这些在 viewDidLoad 上加载。 数组(ish)形式的数据示例如下:

Department = "Department 1"
Company = ["Company 1":"Department 1","Company 2":"Department 2"]
Spread = ["Spread 1":"Department 1","Spread 2 ":"Department 2"]

我当前的 PickerView 函数代码:

public func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    var countRows : Int = dep.count
    if pickerView == companyPicker {
        countRows = self.company.count
    }
    else if pickerView == spreadPicker {
        countRows = self.spread.count
    }
    else if pickerView == incidentPicker {
        countRows = self.incident.count
    }
    return countRows
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == deptPicker {
        let titleRow = dep[row].departmentName
        return titleRow
    }
    else if pickerView == companyPicker {
        let titleRow = company[row].companyName
        return titleRow
    }
    else if pickerView == spreadPicker {
        let titleRow = spread[row].spreadName
        return titleRow
    }
    else if pickerView == incidentPicker {
        let titleRow = incident[row].incidentTypeName
        return titleRow
    }
    return ""
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == deptPicker {
        self.deptartmentTextField.text = self.dep[row].departmentName
        self.deptartmentTextField.resignFirstResponder()
    }
    else if pickerView == companyPicker {
        self.companyTextField.text = self.company[row].companyName
        self.companyTextField.resignFirstResponder()
    }
    else if pickerView == spreadPicker {
        self.spreadTextField.text = self.spread[row].spreadName
        self.spreadTextField.resignFirstResponder()
    }
    else if pickerView == incidentPicker {
        self.incidentTextField.text = self.incident[row].incidentTypeName
        self.incidentTextField.resignFirstResponder()
    }
}

我想我最大的问题是是否有一种方法可以根据 Dept 选择器过滤 Company 和 Spread 选择器。

【问题讨论】:

  • 我自己解决了这个问题。万一有人过来找。我为第二个和第三个选择器视图添加了过滤和附加到新数组的函数,然后重新加载了数据。
  • 你可以回答你自己的问题,让感兴趣的人更清楚。

标签: ios json swift struct uipickerview


【解决方案1】:

为了解决这个问题,我添加了两个函数来过滤来自第一个部门选择器的数据。我将这些添加到我的 didSelectRow 选择器函数中。然后我在过滤后重新加载了第二个和第三个选择器。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2014-08-16
    • 1970-01-01
    • 2016-04-07
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2021-12-11
    相关资源
    最近更新 更多