【问题标题】:How to remove and add items in uipickerview in swift 4.?如何在 swift 4. 的 uipickerview 中删除和添加项目?
【发布时间】:2019-03-06 04:26:13
【问题描述】:

我有三个文本字段,我为其显示与下拉菜单相同的选择器视图以选择值。所以条件是我在一个数组中有 5 个值,其值为红色、蓝色、绿色、黄色、黑色。 所以条件是

  1. 这三个文本字段不能具有相同的值。也就是说,对于第一个文本字段 1,如果我从选择器中选择红色作为值,则当我选择文本字段 2 或文本字段 3 时,应从选择器视图中删除或禁用值“红色”。

  2. 如果我从选取器视图中将文本字段 1 的值从红色更改为黑色,则当我单击文本字段 2 或文本字段 3 时,禁用或删除的红色值应添加回选取器视图。

我正在尝试的代码是:

import UIKit


class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    @IBOutlet weak var textFiled1: UITextField!
    @IBOutlet weak var textFiled2: UITextField!
    @IBOutlet weak var textFiled3: UITextField!
    @IBOutlet weak var pickerView: UIPickerView!

    var Array = ["Blue", "Green", "Red", "White", "Grey"]
    var indexOfPicker = Int()

    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.dataSource = self
        pickerView.delegate = self
    }

    @IBAction func minusButton(_ sender: UIButton) {
        if Array.count != 0 {
            Array.remove(at: indexOfPicker)
            pickerView.reloadAllComponents()
        }
    }

    @IBAction func plusButton(_ sender: UIButton) {
        if textFiled.text != "" {
            Array.append(textFiled.text!)
            pickerView.reloadAllComponents()
        }
    }

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

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

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

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        indexOfPicker = row
    }    
}

【问题讨论】:

  • 感谢 Rajesh 的编辑。在这方面你能帮帮我吗!?
  • 您的代码中只有一个文本字段?
  • No Rajesh 我有 3 个文本字段。这只是我发布的起始代码。

标签: ios iphone xcode swift4 uipickerview


【解决方案1】:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {

    @IBOutlet weak var textFiled1: UITextField!
    @IBOutlet weak var textFiled2: UITextField!
    @IBOutlet weak var textFiled3: UITextField!
    @IBOutlet weak var pickerView: UIPickerView!

    var selectedTextField:UITextField?

    var colorsArray = ["Blue", "Green", "Red", "White", "Grey"]

    override func viewDidLoad() {
        super.viewDidLoad()

        textFiled1.delegate = self
        textFiled2.delegate = self
        textFiled3.delegate = self

        pickerView.dataSource = self
        pickerView.delegate = self
    }

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        let tempArr = colorsArray.filter { ![textFiled1.text!,textFiled2.text!,textFiled3.text!].contains($0) }
        return tempArr.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let tempArr = colorsArray.filter { ![textFiled1.text!,textFiled2.text!,textFiled3.text!].contains($0) }
        return tempArr[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let tempArr = colorsArray.filter { ![textFiled1.text!,textFiled2.text!,textFiled3.text!].contains($0) }
        self.selectedTextField?.text = tempArr[row]
        pickerView.reloadAllComponents()
    }
    func textFieldDidBeginEditing(_ textField: UITextField) {
        self.selectedTextField = textField
        pickerView.reloadAllComponents() 
    }
}

【讨论】:

  • 非常感谢拉杰什。你能解释一下 didBeginEditing 的逻辑吗?当我在录制 UITextField 时呈现 uipickerview 时会调用它吗
  • 当您点击任何文本字段时,将调用此委托方法,并且该文本字段的引用将存储在名为 selectedTextField 的变量中。当您在选择器视图中选择某个值时,所选文本将分配到适当的文本字段中。在pickerview 数据源方法中,如果任何文本文件包含颜色,我使用过滤器将其从pickerview 数据源数组中删除。检查更新的答案
  • Rajesh 如果您以任何方式发布一个示例 GitHub 项目,对我来说将是一个很大的帮助:)
  • 非常感谢 Rajesh...如果需要帮助,我一定会检查并回复您。
  • 当然 rajesh 我用绿色勾号更新了,但我确实支持了,但由于我的声誉低于 15,它可能不会公开显示
猜你喜欢
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2017-11-30
相关资源
最近更新 更多