【问题标题】:Not able to save selected value from a UIPickerView to an array无法将 UIPickerView 中的选定值保存到数组中
【发布时间】:2020-09-24 04:18:07
【问题描述】:

到目前为止我已经尝试过使用

func pickerView1(_ helpTypePicker: UIPickerView, didSelectRow row: Int, inComponent component: Int { 
  infoListInit.requestInfoList[4] = (helpTypePickerValues[row]) 
}

但该值并没有保存到数组中。保存后我尝试打印该值,但无济于事。我的 viewDidLoad 函数中确实有 helpTypePicker 作为自我委托,所以我不知道从这里去哪里。 UITextFields 中的其他文本值保存得很好,但我的 UIPickerViews 在这方面都没有工作

这是完整的课程:

import Foundation
import UIKit

class requestHelpTypePickerScreen: UIViewController, 
UIPickerViewDataSource, UIPickerViewDelegate {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent 
 component: Int) -> Int {
    if pickerView.tag == 1 {
        return helpTypePickerValues.count
    } else {
        return languagePickerValues.count
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView.tag == 1 {
        return "\(helpTypePickerValues[row])"
    } else {
        return "\(languagePickerValues[row])"
    }
}
// Mark: outlets
@IBOutlet weak var helpTypePicker: UIPickerView!
@IBOutlet weak var languagePicker: UIPickerView!
@IBOutlet weak var helpTypePickerLabel: UILabel!

let helpTypePickerValues = ["Academic/Professional", "Donate", "Food/Groceries", "Medication", "Emotional Support", "Misc."]
let languagePickerValues = ["Arabic", "Chinese", "Spanish", "English", "French", "Hindi/Urdu", "Korean", "Russian"]

override func viewDidLoad() {
    super.viewDidLoad()
    
    helpTypePicker.delegate = self
    languagePicker.delegate = self
    self.helpTypePicker.selectRow(2, inComponent: 0, animated: true)
    self.languagePicker.selectRow(3, inComponent: 0, animated: true)
}

// Mark: actions
@IBAction func buttonPressed(_ sender: Any) {
    func pickerView(_ helpTypePicker: UIPickerView,
    didSelectRow row: Int,
    inComponent component: Int) {
        infoListInit.requestInfoList[5] = (helpTypePickerValues[row])
    }
    
    // this is called pickerView1 because it would conflict with the above 
    // function if called pickerView
    func pickerView1(_ languagePicker: UIPickerView,
    didSelectRow row1: Int,
    inComponent component: Int) {
        infoListInit.requestInfoList[6] = (languagePickerValues[row1])
    }
    performSegue(withIdentifier: "pickersDone", sender: nil)
}

【问题讨论】:

  • 函数本身是否被调用?或者它只是没有保存到数组中?
  • 函数名称中似乎有拼写错误,它显示为 pickerView1 而不是 pickerView(没有 1)
  • 请检查代理是否已分配。放上相关代码就明白了

标签: ios arrays swift xcode uipickerview


【解决方案1】:

你的代码有错误,Delegate表示当UIPickerView中选择新行时,会调用函数pickerView(_:didSelectRow:inComponent:)(参数名无所谓)。

在您的情况下,当任何选择器选择新行 pickerView(_:didSelectRow:inComponent:) 时,将调用选择器作为第一位置的参数传递。您应该检查修改了哪个选择器,然后更改您的逻辑。

在你的情况下:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == helpTypePicker {
        infoListInit.requestInfoList[5] = helpTypePickerValues[row]
    } else {
        infoListInit.requestInfoList[6] = languagePickerValues[row]
    }
}

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多