Как показать только один компонент, когда в UIPickerView есть несколько компонентов? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть два компонента в UIPickerView.Один для страны, а другой для города.Я хочу, чтобы при нажатии кнопки «Страна» отображался только один компонент, а при нажатии кнопки «Город» - другой.

@IBOutlet weak var myPicker: UIPickerView!


    var pickerData = [["India", "Pakistan", "Bangladesh", "USA", "Afganistan", "Russia", "Nepal", "Bhutan"], ["Chandigarh", "Punjab", "Ludhiana", "Amritsar", "Shimal", "Una"]]

    override func viewDidLoad() {
        super.viewDidLoad()
        myPicker.isHidden = true

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return pickerData.count
    }

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

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

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
       // print(pickerData[row])
        showCountry.text = pickerData[component][row]

    }

    @IBAction func showCountry(_ sender: Any) {
        myPicker.isHidden = false
    }

На данный момент, когда я нажимаю на страну, отображаются оба компонента, но я просто хочупоказать один компонент в окне выбора.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы можете сделать это, просто обращаясь с ним в условиях как требование

    import UIKit

class ViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
    var pickerData = [["India", "Pakistan", "Bangladesh", "USA", "Afganistan", "Russia", "Nepal", "Bhutan"], ["Chandigarh", "Punjab", "Ludhiana", "Amritsar", "Shimal", "Una"]]
    @IBOutlet weak var myPicker: UIPickerView!
    var check : Int = 0
    override func viewDidLoad() {
        super.viewDidLoad()
         myPicker.isHidden = true
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        if check == 1 {
            return 1
        }
        else
        {
           return 1
        }

    }

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

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if check == 1 {
           return pickerData[0][row]
        }
        else
        {
             return pickerData[1][row]
        }

    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        // print(pickerData[row])
       // showCountry.text = pickerData[component][row]

    }

    @IBAction func showCountry(_ sender: Any) {
        check = 1
        myPicker.reloadAllComponents()
        myPicker.isHidden = false
    }

    @IBAction func showcity(_ sender: Any) {
        check = 2
        myPicker.reloadAllComponents()
        myPicker.isHidden = false
    }

}

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

0 голосов
/ 05 июля 2019

Если вы хотите выбрать один сборщик и страну и город

numberOfComponents 

должно быть 2

или если вы хотите выбрать один сборщик и страну, чем снова выбрать город

numberOfComponent

должно быть 1

но осторожно это состояние

// * 1017 например *

@IBOutlet weak var myPicker: UIPickerView!


var pickerData = [["India", "Pakistan", "Bangladesh", "USA", "Afganistan", "Russia", "Nepal", "Bhutan"], ["Chandigarh", "Punjab", "Ludhiana", "Amritsar", "Shimal", "Una"]]

var isSelectingCountry = true

var selectedCountry: String!
var selectedCity: String!

override func viewDidLoad() {
    super.viewDidLoad()
    myPicker.isHidden = true

}

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

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData[isSelectingCountry ? 0 : 1].count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    let index = isSelectingCountry ? 0 : 1
    return pickerData[index][row]
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    // print(pickerData[row])
    //showCountry.text = pickerData[component][row]
    if isSelectingCountry {
        isSelectingCountry = false
        selectedCountry = pickerData[0][row]
    } else {
        selectedCity = pickerData[1][row]
    }
}

@IBAction func showCountry(_ sender: Any) {
    // if you want reset picker for start with country uncomment below line
    //isSelectingCountry = true
    myPicker.isHidden = false

}

и вы можете использовать selectedCity и selectedCountry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...