ios - 将 UIPickerView 视为组合/选择框

标签 ios arrays swift combobox uipickerview

我正在使用 XCode 8.2.1Swift 3iOS10

我有一个项目列表,格式如下:

ID | Name
---------
1 | John
2 | Maria
3 | Peter
4 | Roger

代码如下所示:

var formsList = [1:"John", 2:"Maria", 3:"Peter", 4:"Roger"]

我想做的是将该数据设置到 UIPickerView 中,因此当有人选择 John 时,ID 1 将被返回>,或者如果有人选择 Peter,则返回 ID 3。

一旦获得该 ID,我就会做其他事情,这就是我需要它的原因。

关于如何实现这一点有什么想法或建议吗?

谢谢!

最佳答案

您只需要按键对字典进行排序并将其用作选择器数据源:

let formsList = [1:"John", 2:"Maria", 3:"Peter", 4:"Roger"]
let dataSource = formsList.sorted{$0.key<$1.key}

通过这种方式,您可以将所有字典名称排序在一个数组中,包括它们的 ID。您的选择器应如下所示:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    @IBOutlet weak var pickerView: UIPickerView!
    @IBOutlet weak var label: UILabel!
    let formsList = [1:"John", 2:"Maria", 3:"Peter", 4:"Roger"]
    var dataSource: [(key: Int, value: String)] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = formsList.sorted{$0.key<$1.key}
        pickerView.delegate = self
        pickerView.dataSource = self
        label.text = "id: " + String(dataSource[pickerView.selectedRow(inComponent: 0)].key) + " - " + "name: " + dataSource[pickerView.selectedRow(inComponent: 0)].value
    }
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return dataSource.count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return dataSource[row].value
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        label.text = "id: " + String(dataSource[row].key) + " - " + "name: " + dataSource[row].value
    }
}

sample

关于ios - 将 UIPickerView 视为组合/选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43030746/

相关文章:

php - 如何阻止 MySQL 复制返回数组中每一列的条目?

swift - 设置 MKMapKit 区域在测试中失败

ios - 从 Swift 函数中的异步调用返回数据

ios - 我的 iOS 应用比其他应用有更大的标签栏、导航栏和键盘

ios - IQKeyboardManager 的“完成”按钮操作在 Swift 中不起作用

ios - 对于iPad应用程序,如何构建一个应用程序以便可以在Production发布时看到它的最终速度?

javascript - 通过匹配其中的属性(也是一个数组)从对象数组中进行选择

ios - 推送 View 时,uitextfield 的 BecomeFirstResponder 仅在第一次单独工作时不起作用

从文本文件创建二维 double 组

ios - UITableViewCell 背景隐藏 UI 元素