пожалуйста, прости мое невежество.Я учусь практически с нуля.
Я пытаюсь заполнить несколько экземпляров pickerView на основе выбора pickerView в верхней части представления.Я хочу, чтобы варианты выбора, отображаемые в остальных видах сборщика, зависели от того, какой элемент был выбран в первом просмотре сборщика.
У меня всего 6 представлений сборщика.1-й делает общий выбор, на котором я хочу основывать остаток.
Pickerview1 состоит из 4 компонентов.Если пользователь выбирает компонент 4, все остальные pickerViews показывают варианты выбора.Если пользователь выбирает компонент 2 или 3, я хочу, чтобы pickerView 4 и 5 отображали N / A, а остальные показывают варианты.Если пользователь выбирает компонент 1, я хочу, чтобы pickerViews 3-5 отображал N / A, в то время как 1-2 показывают варианты выбора.
Я предполагаю, что для этого мне понадобится значение индекса выбранного компонента в pickerView1, чтобысделать оператор if else для func pickerView (_ pickerView: UIPickerView, numberOfRowsInComponent и т. д.
Я нашел в документации selectedRow (inComponent :), но не смог найти рабочие примеры того, как его реализовать, в моемcase.
К настоящему моменту прилагаются некоторые фрагменты моего кода: import UIKit
class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {func numberOfComponents (в pickerView: UIPickerView)}> Int {return
var capacities = ["6","9","12","15","18","24"]
var notUsed = "N/A"
var oduList = ["MXZ-2C20", "MXZ-3C24", "MXZ-3C30", "MXZ-5C42"]
var result:Float = 0.0
var one4num:Float = 1.0
var factor:Float = 1.08
var per5ft:Float = 5
var factory:Float = 98
var selectedRow = 1
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
selectedRow = pickerView.selectedRow(inComponent: index)
if pickerView == oduPicker {
return oduList.count
}
else if pickerView == idu1PickerView {
return capacities.count
}
else if pickerView == idu2PickerView {
return capacities.count
}
else if pickerView == idu3PickerView {
return capacities.count
}
else if pickerView == idu4PickerView {
return capacities.count
}
else {
return capacities.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == oduPicker {
return oduList[row]
}
else if pickerView == idu1PickerView {
return capacities[row]
}
else if pickerView == idu2PickerView {
return capacities[row]
}
else {
return capacities[row]
}
}
@IBOutlet weak var oduPicker: UIPickerView!
@IBOutlet weak var idu1PickerView: UIPickerView!
@IBOutlet weak var idu2PickerView: UIPickerView!
@IBOutlet weak var idu3PickerView: UIPickerView!
@IBOutlet weak var idu4PickerView: UIPickerView!
@IBOutlet weak var idu5PickerView: UIPickerView!
@IBOutlet weak var one4Label: UILabel!
@IBOutlet weak var one4Slider: UISlider!
@IBOutlet weak var output: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.oduPicker.delegate = self
self.oduPicker.dataSource = self
self.idu1PickerView.delegate = self
self.idu1PickerView.dataSource = self
self.idu2PickerView.delegate = self
self.idu2PickerView.dataSource = self
self.idu3PickerView.delegate = self
self.idu3PickerView.dataSource = self
}
@IBAction func one4Slider(_ sender: Any) {
one4Label.text = "\(one4Slider.value)"
}
@IBAction func three8Slider(_ sender: Any) {
three8Label.text = "\(three8Slider.value)"
}
@IBAction func calculateButton(_ sender: Any) {
result = factor*(one4num-factory)/per5ft
output.text = "\(result)"
}
}
Если я реализую предложение следующим образом:
import UIKit
class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
var capacities = ["6","9","12","15","18","24"]
var notUsed = ["N/A"]
var oduList = ["MXZ-2C20", "MXZ-3C24", "MXZ-3C30", "MXZ-5C42"]
var result:Float = 0.0
var one4num:Float = 1.0
var factor:Float = 1.08
var per5ft:Float = 5
var factory:Float = 98
var rowSelected: Int?
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == oduPicker{
self.rowSelected = row
// make anything
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView == oduPicker {
return oduList.count
}
else if pickerView == idu1PickerView {
return capacities.count
}
else if pickerView == idu2PickerView {
return capacities.count
}
else if pickerView == idu3PickerView {
if rowSelected! < 2 {
return 1
}
else {
return capacities.count
}
}
else if pickerView == idu4PickerView {
if rowSelected! < 3 {
return 1
}
else {
return capacities.count
}
}
else {
if rowSelected! < 4 {
return 1
}
else {
return capacities.count
}
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == oduPicker {
return oduList[row]
}
else if pickerView == idu1PickerView {
return capacities[row]
}
else if pickerView == idu2PickerView {
return capacities[row]
}
else if pickerView == idu3PickerView {
if rowSelected! < 2 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else if pickerView == idu4PickerView {
if rowSelected! < 3 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else if pickerView == idu5PickerView {
if rowSelected! < 4 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else {
return capacities[row]
}
}
@IBOutlet weak var oduPicker: UIPickerView!
@IBOutlet weak var idu1PickerView: UIPickerView!
@IBOutlet weak var idu2PickerView: UIPickerView!
@IBOutlet weak var idu3PickerView: UIPickerView!
@IBOutlet weak var idu4PickerView: UIPickerView!
@IBOutlet weak var idu5PickerView: UIPickerView!
@IBOutlet weak var one4Label: UILabel!
@IBOutlet weak var one4Slider: UISlider!
@IBOutlet weak var output: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.oduPicker.delegate = self
self.oduPicker.dataSource = self
self.idu1PickerView.delegate = self
self.idu1PickerView.dataSource = self
self.idu2PickerView.delegate = self
self.idu2PickerView.dataSource = self
self.idu3PickerView.delegate = self
self.idu3PickerView.dataSource = self
self.idu4PickerView.delegate = self
self.idu4PickerView.dataSource = self
self.idu5PickerView.delegate = self
self.idu5PickerView.dataSource = self
}
@IBAction func one4Slider(_ sender: Any) {
one4Label.text = "\(one4Slider.value)"
}
@IBAction func calculateButton(_ sender: Any) {
result = factor*(one4num-factory)/per5ft
output.text = "\(result)"
}
}
Код нарушает «FirstViewController» и, по-видимому, делает недействительными операторы «numberOfRows» и «titleForRows» кака также каскад ошибок ниже этого.
Если я реализую после этих двух функций:
else {
return capacities[row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == oduPicker{
self.rowSelected = row
// make anything
}
@IBOutlet weak var oduPicker: UIPickerView!
@IBOutlet weak var idu1PickerView: UIPickerView!
@IBOutlet weak var idu2PickerView: UIPickerView!
@IBOutlet weak var idu3PickerView: UIPickerView!
@IBOutlet weak var idu4PickerView: UIPickerView!
@IBOutlet weak var idu5PickerView: UIPickerView!
Он ломает все переменные pickerView, такие как oduPicker и т. Д.
Если я пытаюсь вывести оператор в 1-ю функцию следующим образом:
var rowSelected: Int?
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, numberOfRowsInComponent component: Int) -> Int {
if pickerView == oduPicker {
self.rowSelected = row
return oduList.count
}
else if pickerView == idu1PickerView {
return capacities.count
}...
Снова ломается«FirstViewController» с ошибкой «Тип« FirstViewController »не соответствует протоколу« UIPickerViewDataSource »»
Я также вынужден поставить «!» после «rowSelected» для упаковки / развертывания.Я не уверен, что это означает или важно в данный момент.
Обновление:
Если я реализую по предложению Самуила как таковой:
import UIKit
классFirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {func numberOfComponents (в pickerView: UIPickerView) -> Int {return 1}
var capacities = ["6","9","12","15","18","24"]
var notUsed = ["N/A"]
var oduList = ["MXZ-2C20", "MXZ-3C24", "MXZ-3C30", "MXZ-5C42"]
var result:Float = 0.0
var one4num:Float = 1.0
var factor:Float = 1.08
var per5ft:Float = 5
var factory:Float = 98
var selectedRow = 1
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
selectedRow = pickerView.selectedRow(inComponent: index)
if pickerView == oduPicker {
return oduList.count
}
else if pickerView == idu1PickerView {
return capacities.count
}
else if pickerView == idu2PickerView {
return capacities.count
}
else if pickerView == idu3PickerView {
if selectedRow < 2 {
return 1
}
else {
return capacities.count
}
}
else if pickerView == idu4PickerView {
if selectedRow < 3 {
return 1
}
else {
return capacities.count
}
}
else {
if selectedRow < 4 {
return 1
}
else {
return capacities.count
}
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == oduPicker {
return oduList[row]
}
else if pickerView == idu1PickerView {
return capacities[row]
}
else if pickerView == idu2PickerView {
return capacities[row]
}
else if pickerView == idu3PickerView {
if selectedRow < 2 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else if pickerView == idu4PickerView {
if selectedRow < 3 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else if pickerView == idu5PickerView {
if selectedRow < 4 {
return notUsed[row]
}
else {
return capacities[row]
}
}
else {
return capacities[row]
}
}
@IBOutlet weak var oduPicker: UIPickerView!
@IBOutlet weak var idu1PickerView: UIPickerView!
@IBOutlet weak var idu2PickerView: UIPickerView!
@IBOutlet weak var idu3PickerView: UIPickerView!
@IBOutlet weak var idu4PickerView: UIPickerView!
@IBOutlet weak var idu5PickerView: UIPickerView!
@IBOutlet weak var one4Label: UILabel!
@IBOutlet weak var one4Slider: UISlider!
@IBOutlet weak var output: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.oduPicker.delegate = self
self.oduPicker.dataSource = self
self.idu1PickerView.delegate = self
self.idu1PickerView.dataSource = self
self.idu2PickerView.delegate = self
self.idu2PickerView.dataSource = self
self.idu3PickerView.delegate = self
self.idu3PickerView.dataSource = self
self.idu4PickerView.delegate = self
self.idu4PickerView.dataSource = self
self.idu5PickerView.delegate = self
self.idu5PickerView.dataSource = self
}
@IBAction func one4Slider(_ sender: Any) {
one4Label.text = "\(one4Slider.value)"
}
@IBAction func calculateButton(_ sender: Any) {
result = factor*(one4num-factory)/per5ft
output.text = "\(result)"
}
}
Я получаю ошибку после строки:
selectedRow = pickerView.selectedRow(inComponent: index)
"Невозможно преобразовать значение типа '(Any) -> Int' в ожидаемый тип аргумента 'Int'"