Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.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
Ios 选择器视图未选择第一个对象_Ios_Select_Button_Uipickerview_Swift4 - Fatal编程技术网

Ios 选择器视图未选择第一个对象

Ios 选择器视图未选择第一个对象,ios,select,button,uipickerview,swift4,Ios,Select,Button,Uipickerview,Swift4,我的代码现在有一个选择器视图,可以在文本字段中放置一个单词。问题是,用户必须更改picker视图中的单词才能使其工作。我在图片下方添加了更多信息 import UIKit class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet var tx: UITextField! let animals = ["lion", "Dog","JUDO"

我的代码现在有一个选择器视图,可以在文本字段中放置一个单词。问题是,用户必须更改picker视图中的单词才能使其工作。我在图片下方添加了更多信息

import UIKit

class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource {
    @IBOutlet var tx: UITextField!

    let animals = ["lion", "Dog","JUDO"]
    var pickerview = UIPickerView()

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

        pickerview.delegate = self
        pickerview.dataSource = self
        tx.inputView = pickerview
        let toolbar = UIToolbar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: view.bounds.width, height: 44))

        var items = [UIBarButtonItem]()


        items.append( UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneAction)) )
        toolbar.items = items
        tx.inputAccessoryView = toolbar
    }
    @objc func doneAction(){

        tx.resignFirstResponder()
        view.endEditing(true)

    }
    public func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return animals.count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return  animals[row]
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        tx.text = animals[row]

    }
}


如果我按“完成”按钮,则不会传输任何内容。我将不得不从“狮子”向下滚动到“狗”,然后返回到“狮子”以转移“狮子”。我只想点击“完成”按钮并传输“Lion”。

选择器视图的值最初不会更改。您应该使数组的第一个元素成为
viewDidLoad
中文本字段的文本

override func viewDidLoad() {
    [...]

    tx.text = animals.first
}

尝试以下解决方案

 @objc func doneAction(){

    tx.resignFirstResponder()

    // get first index value of array if tx is empty
    if (tx.text?.isEmpty)! {
       tx.text = self.animals.first
    }

    view.endEditing(true)

}

如果您想在单击“完成”按钮时获取选择器的值,则应使用
pickerview.selectedRow(不完整项:0)
获取选择器视图中选择的当前值。如果在不滚动的情况下打开并关闭选择器,则不会调用
func-pickerView(\upickerview:UIPickerView,didSelectRow-row-Int,incomonent-component-Int)
。因此,您的代码需要更改如下

@objc func doneAction(){

        let selectedIndex = pickerview.selectedRow(inComponent: 0)
        tx.text = animals[selectedIndex]
        tx.resignFirstResponder()
        view.endEditing(true)

    }

不管怎样,你是否可以安排采摘者视图总是让狮子先出现,不管发生什么?@SamBurns,恐怕我不明白。选择器视图当前显示“lion”作为第一个元素。如果我选择dog。然后单击textfield dog将是第一个出现的内容或用户当前的状态selecting@SamBurns如果要选择特定的行,请使用
selectRow(uquo:component:animated:)
方法,如下所示:
picker.selectRow([row number,在您的情况下为0],component:[component number,在您的情况下为0],animated:false)
使您的
动物
属性可变,即
变量动物=…
。每次点击“完成”按钮时,删除所选项目并将其插入
动物
属性的索引零(0)处。然后,重新加载
pickerView
@YogeshBharate它可以完美地工作…我已经用我自己的演示进行了检查。。。