Как удалить и добавить элементы в uipickerview в swift 4.? - PullRequest
2 голосов
/ 06 марта 2019

У меня есть три текстовых поля, для которых я показываю тот же вид сборщика, что и раскрывающийся список для выбора значений. Таким образом, условие состоит в том, что у меня есть 5 значений в массиве со значениями красный, синий, зеленый, желтый, черный. Итак, условие

  1. Эти три текстовых поля не могут иметь одинаковое значение. То есть если для первого текстового поля 1, если я выбираю красный в качестве значения из средства выбора, значение «красный» должно быть удалено или отключено из представления средства выбора, когда я выбираю текстовое поле 2 или текстовое поле 3.

  2. И если я изменю значение текстового поля 1 с красного на черное в представлении средства выбора, значение красного, которое отключено или удалено, должно быть добавлено обратно в окно средства выбора, когда я щелкаю текстовое поле 2 или текстовое поле 3.

Код, который я пробую: 1013 *

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
    }    
}

1 Ответ

2 голосов
/ 06 марта 2019
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() 
    }
}
...