Ошибка didSelectRow множественного выбора в Swift - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 2 вида выбора, 1 вид выбора предназначен для выбора криптовалюты из массива, а другой вид выбора используется для выбора валюты из массива. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю приложение на симуляторе и выбираю криптовалюту в cryptoPicker, приложение также выбирает то же значение массива из currencyPicker и наоборот. Я не хочу, чтобы значение массива 0 извлекалось из обоих массивов, если оно не выбрано пользователем.

@IBOutlet weak var cryptoCurrentRate: UILabel!
@IBOutlet weak var currencyLabel: UILabel!
@IBOutlet weak var currencyPicker: UIPickerView!
@IBOutlet weak var cryptoPicker: UIPickerView!
@IBOutlet weak var cryptoLabel: UILabel!


var coinManager = CoinManager()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    coinManager.delegate = self
    currencyPicker.dataSource = self
    currencyPicker.delegate = self
    cryptoPicker.dataSource = self
    cryptoPicker.delegate = self   

}

}

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


    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if pickerView == currencyPicker {
        return coinManager.currencyArray.count
        }
        if pickerView == cryptoPicker {
        return coinManager.cryptoArray.count
    }
        return 0
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView == currencyPicker {
        return coinManager.currencyArray[row]
        }
        if pickerView == cryptoPicker {
        return coinManager.cryptoArray[row]
    }
        return ""
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let selectedCurrency = coinManager.currencyArray[row]
        let selectedCrypto = coinManager.cryptoArray[row]
        coinManager.fetchCryptoCoin(assetIdBase: selectedCrypto, assetIdQuote: selectedCurrency)
    }

}

1 Ответ

0 голосов
/ 23 апреля 2020

Сделайте ту же проверку для выбора и в 'didSelectRow', вы можете сделать это так:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
     var selectedCurrency: CurrencyModel? = nil
     var selectedCrypt: CryptModel? = nil


    if pickerView == currencyPicker {
        selectedCurrency = coinManager.currencyArray[row]
    }
    if pickerView == cryptoPicker {
        selectedCrypto = coinManager.cryptoArray[row]
    }

    coinManager.fetchCryptoCoin(assetIdBase: selectedCrypt == nil ? coinManager.cryptoArray[.zero] : selectedCrypt!, assetIdQuote: selectedCurrency == nil ? coinManager.currencyArray[.zero] : selectedCurrency!)
}

По умолчанию он получит первое значение из 'coinManager.currencyArray' или 'coinManager.cryptoArray «

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