как мы можем использовать 2 UIPicker на одном контроллере? - PullRequest
0 голосов
/ 02 декабря 2019

Xcode 11;Swift 4

Как я могу использовать 2 UIPicker на одном контроллере?

Например, в приведенном ниже коде я хотел бы просто сравнить значение UIPicker 1 и значение UIPicker2. Спасибо!

Это должно быть примерно так:

Вот мой пример:

if row1 == 0 && row2 == 0 {     
} 
else if row1 == 0 && row2 == 1 {
} 
else {
}

Реальный код:

import Foundation
import UIKit

var data1 = ["1", "2", "3", "4", "5"]
var data2 = ["1", "2", "3", "4", "5"]
var Calculator = "0"

class ThirdViewController: UIViewController, UIScrollViewDelegate, UIPickerViewDataSource,        UIPickerViewDelegate {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

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

   return data1.count

}

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

@IBOutlet weak var Calculator: UILabel!
@IBOutlet weak var from: UIPickerView!
@IBOutlet weak var to: UIPickerView!

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if row == 0 {

    } else if row == 1 {

    } else if row == 2 {

    }
}

override func viewDidLoad() {

super.viewDidLoad()
    self.from.dataSource = self
    self.from.delegate = self
    self.to.dataSource = self
    self.to.delegate = self   
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
} 
}

Ответы [ 2 ]

4 голосов
/ 02 декабря 2019

Вы можете использовать sth следующим образом:

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int     {
        if pickerView == from {
            return data1.count
        } else {
            return data2.count
        }
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView == from {
            return data1[row]
        } else {
            return data2[row]
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let index1 = from.selectedRow(inComponent: 0)
        let index2 = to.selectedRow(inComponent: 0)
        let row1 = data1[index1]
        let row2 = data2[index2]

        calculator.text = "\(row1) - \(row2)"
    }

Любые функции делегата UIKit получат вызывающий компонент в качестве первого параметра, который вы можете использовать для проверки того, какой компонент выполняет эту функцию.

1 голос
/ 03 декабря 2019

Почему бы вам не установить значение каждого тега сборщика и не использовать его для идентификации каждого, например:

Сначала установите значение тега для каждого сборщика

override func viewDidLoad() {

super.viewDidLoad()
self.from.dataSource = self
self.from.delegate = self
self.from.tag = 1

self.to.dataSource = self
self.to.delegate = self   
self.to.tag = 2

}

Затем используйте этозначение тега для идентификации каждого сборщика:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView.tag == 1 {
        return data1[row]
    } else {
        return data2[row]
    }
}
...