Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无论所选选项如何,Swift UIPickerView默认为最后一个选项_Swift_Uipickerview - Fatal编程技术网

无论所选选项如何,Swift UIPickerView默认为最后一个选项

无论所选选项如何,Swift UIPickerView默认为最后一个选项,swift,uipickerview,Swift,Uipickerview,我有一个UIPickerView,当点击“完成”按钮时,它会一直选择数组的最后一个选项。我可以点击UITextField或我正在使用的一个按钮,该按钮将UITextField指定为第一响应者。我的代码如下: 编辑。我还应该提到,我使用的是Xcode 11转基因种子,如果这是为了改变现状的话。我在一个单独的项目上测试了下面显示的代码的干净版本,没有其他测试,它显示了相同的行为 @IBOutlet weak var sortTypeTextField: UITextField! var selec

我有一个UIPickerView,当点击“完成”按钮时,它会一直选择数组的最后一个选项。我可以点击UITextField或我正在使用的一个按钮,该按钮将UITextField指定为第一响应者。我的代码如下:

编辑。我还应该提到,我使用的是Xcode 11转基因种子,如果这是为了改变现状的话。我在一个单独的项目上测试了下面显示的代码的干净版本,没有其他测试,它显示了相同的行为

@IBOutlet weak var sortTypeTextField: UITextField!

var selectedSortOption = String()

let sortOptions = [
        USER_REVIEWS_SORT_OPTION_DATE,
        USER_REVIEWS_SORT_OPTION_LIKES,
        USER_REVIEWS_SORT_OPTION_DISLIKES
    ]
上面的排序是位于不同文件中的字符串数组,但出于这个问题的目的,我将在此处添加:

let USER_REVIEWS_SORT_OPTION_DATE = "Date"
let USER_REVIEWS_SORT_OPTION_LIKES = "Number of Likes"
let USER_REVIEWS_SORT_OPTION_DISLIKES = "Number of Dislikes"
let DONE_TOOLBAR_BUTTON_TITLE = "Done"
我有一个函数setupUI,我在viewDidLoad中与sortTypeTextField的值一起调用它。该值是viewController首次加载时数组中的第一个字符串

override func viewDidLoad() {
    super.viewDidLoad()
    setupUI()
}

func setupUI() {
    sortTypeTextField.text = sortOptions[0]
    createSortPicker()
    createPickerToolbar()
}

func createSortPicker() {
    let sortPicker = UIPickerView()
    sortPicker.delegate = self
    sortTypeTextField.inputView = sortPicker
}

func createPickerToolbar() {
    let toolBar = UIToolbar()
    toolBar.sizeToFit()
    let doneButton = UIBarButtonItem(title: DONE_TOOLBAR_BUTTON_TITLE, style: .plain, target: self, action: #selector(dismissKeyboard))
    toolBar.setItems([doneButton], animated: false)
    toolBar.isUserInteractionEnabled = true
    sortTypeTextField.inputAccessoryView = toolBar
}

@objc override func dismissKeyboard() {
    view.endEditing(true)
}
我还使用一个按钮来显示UIPicker,如下所示:

@IBAction func sortRatingsButtonWasTapped(_ sender: Any) {
    sortTypeTextField?.becomeFirstResponder()
}
如下图所示,我希望sortTypeTextField值更改为selected选项,但由于某些原因,当点击工具栏中的Done按钮时,显示的文本始终是数组中的第三个字符串,无论我选择了第一个、第二个还是第三个

extension ReviewsViewController: UIPickerViewDelegate, UIPickerViewDataSource {

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        sortOptions.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return sortOptions[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        selectedSortOption = sortOptions[row]
        sortTypeTextField.text = selectedSortOption
    }

}

这就是我创建pickerView的方式

class ViewController: UIViewController {

    @IBOutlet weak var selectaday: UITextField!
    let days = ["monday","wednesday"]
    var selectedDay: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        createDayPicker()
    }

    func createDayPicker(){
        let dayPicker = UIPickerView()
        dayPicker.delegate = self
        selectaday.inputView = dayPicker
    }

}

extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource{
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return days.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return days[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        selectedDay = days[row]
        selectaday.text = selectedDay
    }

}

这似乎是模拟器中的一个bug。我在我的设备上测试了上面的我的代码和Abdul Karim Khan提供的代码,并测试了它们应该做的工作。标签将根据在选择器视图中选择的选项进行更新。

您的“selectSortOption”在哪里?您没有声明变量“selectSortOption”。只是在顶部添加了selectSortOption。我正在发布代码,该代码运行良好,经过测试。