【问题标题】:How to save selected option in UIPickerView如何在 UIPickerView 中保存选定的选项
【发布时间】:2021-08-18 19:14:42
【问题描述】:

我有一个 PickerView,它应该保存选定的 pickerView,但它只选择默认选项。我尝试使用用户默认值,但它不起作用。

我正在使用 Xcode 8。

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pizzaToppings.count
        
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        
        pizzaTextField.text = pizzaToppings[row]
        UserDefaults.standard.set(row, forKey: "pickerViewRow")
       
    }
   func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
    let attrb = NSAttributedString(string: pizzaToppings[row])
        return attrb
        
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pizzaToppings[row]
    }
    

并且在重载函数中我使用了用户默认值

 override func viewDidLoad() {
    let row = UserDefaults.standard.integer(forKey: "pickerViewRow")
    pickerView.selectRow(row, inComponent: 0, animated: false)

【问题讨论】:

  • UserDefaults.standard.set(pizzaToppings[row], forKey: "pickerViewRow") in didSelectRow
  • 为什么同时使用属性标题和行标题?为什么要使用 xcode 8?
  • @williamfinn 我尝试将 row 更改为 PizzaToppings[row] 但没有成功。

标签: swift overloading xcode8 nsuserdefaults uipickerview


【解决方案1】:

让我们看看你在这里做什么。在viewDidLoad() 中,您找到第一次为0 的行(保存在pickerViewRowUserDefaults)。然后选择第一个默认行。如果您点击一行选择器视图,则将该行设置为 UserDefaults。这里的问题是,在viewDidLoad() 内部,您的 UI 选择器视图没有来自数据源的元素。您可以将viewDidLoad 的代码移动到viewDidAppear 中,它应该可以工作。

【讨论】:

  • 你把pickerView的datasource设置成pizzaToppings了吗?
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2020-10-26
相关资源
最近更新 更多