0

我有 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)
    }

}

4

1 回答 1

0

对选择器做同样的检查,在“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”中获取第一个值

于 2020-04-23T19:38:59.250 回答