как сделать 2 или более просмотров в быстром - PullRequest
0 голосов
/ 30 апреля 2018

, поэтому я хочу сделать 2 просмотра средства выбора, но моя проблема заключается в том, что каждый раз, когда я вызываю текстовое поле, они вызывают только одно представление средства выбора. Я уже пытался заменить и создать функцию 2 с другим значением, но функция не работала, когда я ее запускаю вот мой код, я думаю, что проблема в том, что функция pickerview, но я не знаю, как заменить код, чтобы добавить условие, если пользователь щелкнет jenisIDTextField, представление picker покажет массив jenisID, а если пользователь выберет provinisTextField, в представлении picker будет показан массив provinsi

я ценю все ответы спасибо за вашу помощь!

@IBOutlet weak var provinsiIdentitasTextField:
@IBOutlet weak var jenisIDTextField:

func choosePicker () {

    let pickerView = UIPickerView()

    pickerView.delegate = self


jenisIDTextField.inputView=pickerView
provinsiIdentitasTextField.inputView = pickerView

}

 let provinsi=["DKI Jakarta","Jawa Barat","Sumatra Utara"]
    let JenisID=["KTP","SIM","Passport"]
var asd = 0

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

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {



        return provinsi[row]

}


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

}

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


        return provinsiIdentitasTextField.text=provinsi[row]


}

Ответы [ 4 ]

0 голосов
/ 12 июня 2019
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{

    if pickerView == pickerView1 {
        //pickerViewdetails
    } else if pickerView == pickerView2{
       //pickerView2details
    }}

Вы можете публично объявить просмотры сборщика и использовать приведенный выше код для добавления нескольких просмотров сборщика.

0 голосов
/ 30 апреля 2018

Это полный код реализации:

class ViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource,UITextFieldDelegate {

@IBOutlet weak var textFieldOne: UITextField!
@IBOutlet weak var textFieldTwo: UITextField!

@IBOutlet weak var pickerView: UIPickerView!

var isForWhichTextField:Int = 0

var arrForDisplay:[String] = [String]()

let provinsi = ["DKI Jakarta","Jawa Barat","Sumatra Utara"]
let JenisID = ["KTP","SIM","Passport"]


override func viewDidLoad() {
    super.viewDidLoad()
    textFieldOne.inputView = pickerView
    textFieldTwo.inputView = pickerView
    arrForDisplay = provinsi
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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

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

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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    return textFieldOne.text = arrForDisplay[row]
}

//MARK:- UITextfields Delegates

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if textField == textFieldOne{
        arrForDisplay = provinsi
        pickerView.reloadAllComponents()
    }else{
        arrForDisplay = JenisID
        pickerView.reloadAllComponents()
    }
    return true
}}

Надеюсь, это поможет.

0 голосов
/ 30 апреля 2018

Небольшая поправка к ответу @ Jaydip.

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            return provinsiIdentitasTextField.text=provinsi[row]
    }

это всегда присваивает значение только текстовому полю provinsiIdentitasTextField, независимо от того, какое текстовое поле вы выберете. Создайте новое текстовое поле и назначьте этому текстовому полю

      var selectedField: UItextField?

     //implement textfiled delegate
                func textFieldDidBeginEditing(_ textField: UITextField) {

                    if textField == provinisTextField{
                        yourArray = ["DKI Jakarta","Jawa Barat","Sumatra Utara"]
                    }else if textField == jenisIDTextField{
                        yourArray = ["KTP","SIM","Passport"]
                    }
              selectedField = textField

            pickerView.reloadAllComponents()
                }

/// назначаем выделенное текстовое поле

 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
                return selectedField!.text= yourArray[row]
        }
0 голосов
/ 30 апреля 2018

Просто попробуйте, надеюсь, это работает для вас.

    //declare variable
        let yourArray : [String] = []

    //implement textfiled delegate
            func textFieldDidBeginEditing(_ textField: UITextField) {
                if textField == provinisTextField{
                    yourArray = ["DKI Jakarta","Jawa Barat","Sumatra Utara"]
                }else if textField == jenisIDTextField{
                    yourArray = ["KTP","SIM","Passport"]
                }
            }


//implement picker Delegate
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

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

    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            return provinsiIdentitasTextField.text=provinsi[row]
    }
...