Свифт 4 многократного выбора представления не работает.У меня есть три массива, но показывает только "strBlood" - PullRequest
0 голосов
/ 13 марта 2019

Свифт 4 с несколькими окнами выбора не работает.У меня есть три массива, но только «strBlood» показывает точный массив, другие strcountry и strgender не отображаются в окне выбора, и когда я нажимаю на третий ярлык, код вылетает, давая мне ошибку сигнала sigbart

в нескольких представлениях сборщика не отображаются данные в представлении выбора в swift 4, я уже прочитал много учебных пособий, но никто не решает мою проблему, пожалуйста, проверьте и ответьте мне.
когда я реализовал 3 представления сборщика, данные показываюттолько в первом представлении средства выбора, т. е. (strblood), но не в других массивах

приведенный ниже код работает правильно, но есть одна ошибка, связанная с отображением массива в представлении средства выбора при нажатии на другие метки ("lblblood""." lblcountry ")

import UIKit
import Foundation

class RegisterViewController: UIViewController  {

    var strBlood = ["O+","O-","O","A","B+"]
    var  strcountry = ["India","Canada","USA"]
    var strgender = ["Male","Female"]

    var selectedBlood: String?
    var selectedCountry: String?
    var selectedGender: String?

    @IBOutlet weak var txtGender: UITextField!
    @IBOutlet weak var txtCountry: UITextField!
    @IBOutlet weak var lblBloodGroup: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
             self.chooseCountry()
             self.chooseBlood()
             self.choosGender()
    }

    func chooseBlood(){
        let bloodPicker = UIPickerView()
        bloodPicker.delegate = self
        self.lblBloodGroup.inputView = bloodPicker
    }

    func chooseCountry(){

        let countryname = UIPickerView()
        countryname.delegate = self
        self.txtCountry.inputView = countryname
    }
    func choosGender() {

    let gender1 = UIPickerView()
    gender1.delegate = self
    self.txtGender.inputView = gender1
    }

}
extension RegisterViewController : UIPickerViewDelegate , UIPickerViewDataSource {

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if lblBloodGroup.isEnabled {
            print("BLOOD SELECTED")
           return strBlood.count

        }
        else if txtCountry.isEnabled{
            print("COUNTRY SELECTED")

            return strcountry.count
        }else {
             print("GENDER SELECTED")
            return strgender.count
        }

        }

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

        if lblBloodGroup.isEnabled{
            print("BLOOD SELECTED1")
            return strBlood[row]


        }else if txtCountry.isEnabled{

            return strcountry[row]
        }else {
            return strgender[row]
        }

       }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {
        if lblBloodGroup.isEnabled{
            selectedBlood = strBlood[row]
            lblBloodGroup.text = selectedBlood

        }else if txtCountry.isEnabled{
            selectedCountry = strcountry[row]
            txtCountry.text = selectedCountry
        }else {
            selectedGender = strgender[row]
            txtGender.text = selectedGender
        }
    }
}

1 Ответ

0 голосов
/ 13 марта 2019

Добиться этого isEnabled не поможет.вам нужно использовать isEditing, и это будет верно, если пользователь нажмет на любой UITextField, и ваш код будет:

import UIKit
import Foundation

class ViewController: UIViewController  {

    var strBlood = ["O+","O-","O","A","B+"]
    var strcountry = ["India","Canada","USA"]
    var strgender = ["Male","Female"]

    var selectedBlood: String?
    var selectedCountry: String?
    var selectedGender: String?

    @IBOutlet weak var txtGender: UITextField!
    @IBOutlet weak var txtCountry: UITextField!
    @IBOutlet weak var lblBloodGroup: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        self.chooseCountry()
        self.chooseBlood()
        self.choosGender()
    }

    func chooseBlood(){
        let bloodPicker = UIPickerView()
        bloodPicker.delegate = self
        self.lblBloodGroup.inputView = bloodPicker
    }

    func chooseCountry(){

        let countryname = UIPickerView()
        countryname.delegate = self
        self.txtCountry.inputView = countryname
    }
    func choosGender() {

        let gender1 = UIPickerView()
        gender1.delegate = self
        self.txtGender.inputView = gender1
    }
}
extension ViewController : UIPickerViewDelegate , UIPickerViewDataSource {

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if lblBloodGroup.isEditing {
            print("BLOOD SELECTED")
            return strBlood.count

        }
        else if txtCountry.isEditing{
            print("COUNTRY SELECTED")

            return strcountry.count
        }else {
            print("GENDER SELECTED")
            return strgender.count
        }

    }

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

        if lblBloodGroup.isEditing{
            print("BLOOD SELECTED1")
            return strBlood[row]


        }else if txtCountry.isEditing{

            return strcountry[row]
        }else {
            return strgender[row]
        }

    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {
        if lblBloodGroup.isEditing{
            selectedBlood = strBlood[row]
            lblBloodGroup.text = selectedBlood

        }else if txtCountry.isEditing{
            selectedCountry = strcountry[row]
            txtCountry.text = selectedCountry
        }else {
            selectedGender = strgender[row]
            txtGender.text = selectedGender
        }
    }
}

И результат будет:

enter image description here

...