Xcode - 我的两个选择器视图连接在一起如何让它们分开选择器视图?
Xcode - My two picker views are connected together how to I make them separate picker views?
我在一个视图控制器上有两个选择器视图(目前,会有更多),当我 select 一个选择器视图上有一个东西时,另一个选择器视图自动更改为值 I selected 在其他选择器视图上....我如何使它们成为两个不同的选择器视图?我尝试为新的选择器视图创建新方法,但这似乎没有用。我真的很感激任何帮助!提前致谢。
这是我的 swift 代码:
import UIKit
class AddRatioViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBAction func BackToHome(_ sender: Any) {
self.performSegue(withIdentifier: "BackToHome", sender: self)
}
@IBOutlet weak var ChooseDrivingGear: UIPickerView!
@IBOutlet weak var ChooseDrivingGear2: UIPickerView!
@IBOutlet weak var chooseBox1: UIButton!
@IBOutlet weak var chooseBox2: UIButton!
let drivingGear = ["1", "12", "36", "60", "84"]
override var shouldAutorotate: Bool {
return true
}
override func viewDidLoad() {
ChooseDrivingGear.isHidden = true
ChooseDrivingGear.delegate = self
ChooseDrivingGear.dataSource = self
ChooseDrivingGear2.isHidden = true
ChooseDrivingGear2.delegate = self
ChooseDrivingGear2.dataSource = self
super.viewDidLoad()
}
@IBAction func chooseBox1Pressed(_ sender: UIButton) {
sender.isHidden = true //added (to prevent overlap)
if ChooseDrivingGear.isHidden {
ChooseDrivingGear.isHidden = false
}
}
@IBAction func chooseBox2Pressed(_ sender: UIButton) {
sender.isHidden = true //added (to prevent overlap)
if ChooseDrivingGear2.isHidden {
ChooseDrivingGear2.isHidden = false
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return drivingGear[row]
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return drivingGear.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
chooseBox1.setTitle(drivingGear[row], for: .normal)
chooseBox2.setTitle(drivingGear[row], for: .normal)
ChooseDrivingGear.isHidden = true
chooseBox1.isHidden = false //added (to prevent overlap)
ChooseDrivingGear2.isHidden = true
chooseBox2.isHidden = false //added (to prevent overlap)
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
ChooseDrivingGear.isHidden = false
ChooseDrivingGear2.isHidden = false
return false
}
//second pickerView
}
在委托方法中,检查 pickerView 的实例。您可以简单地使用 == 运算符甚至 switch case
来比较实例
例如:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch pickerView {
case firstPickerView: //code here
case secondPickerView: //code here
default: break
}
}
确保您为所有选择器视图创建了插座,并且在您的 ViewController 中可用,例如我在上面提到的。 firstPickerView, secondPickerView 等等
发生这种情况的原因是您没有检查选择器视图委托方法中现在更改了哪个选择器视图
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == ChooseDrivingGear {
//do staf for first picker
} else {
//do staf for second one
}
}
或者使用标签更好
override func viewDidLoad() {
ChooseDrivingGear.isHidden = true
ChooseDrivingGear.delegate = self
ChooseDrivingGear.dataSource = self
ChooseDrivingGear.tag = 0
ChooseDrivingGear2.isHidden = true
ChooseDrivingGear2.delegate = self
ChooseDrivingGear2.dataSource = self
ChooseDrivingGear2.tag = 1
super.viewDidLoad()
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 0 {
//do staf for first picker
} else {
//do staf for second one
}
}
p.s 同样在 Swift 中,方法和变量应以小写字母开头。
我在一个视图控制器上有两个选择器视图(目前,会有更多),当我 select 一个选择器视图上有一个东西时,另一个选择器视图自动更改为值 I selected 在其他选择器视图上....我如何使它们成为两个不同的选择器视图?我尝试为新的选择器视图创建新方法,但这似乎没有用。我真的很感激任何帮助!提前致谢。
这是我的 swift 代码:
import UIKit
class AddRatioViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBAction func BackToHome(_ sender: Any) {
self.performSegue(withIdentifier: "BackToHome", sender: self)
}
@IBOutlet weak var ChooseDrivingGear: UIPickerView!
@IBOutlet weak var ChooseDrivingGear2: UIPickerView!
@IBOutlet weak var chooseBox1: UIButton!
@IBOutlet weak var chooseBox2: UIButton!
let drivingGear = ["1", "12", "36", "60", "84"]
override var shouldAutorotate: Bool {
return true
}
override func viewDidLoad() {
ChooseDrivingGear.isHidden = true
ChooseDrivingGear.delegate = self
ChooseDrivingGear.dataSource = self
ChooseDrivingGear2.isHidden = true
ChooseDrivingGear2.delegate = self
ChooseDrivingGear2.dataSource = self
super.viewDidLoad()
}
@IBAction func chooseBox1Pressed(_ sender: UIButton) {
sender.isHidden = true //added (to prevent overlap)
if ChooseDrivingGear.isHidden {
ChooseDrivingGear.isHidden = false
}
}
@IBAction func chooseBox2Pressed(_ sender: UIButton) {
sender.isHidden = true //added (to prevent overlap)
if ChooseDrivingGear2.isHidden {
ChooseDrivingGear2.isHidden = false
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return drivingGear[row]
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return drivingGear.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
chooseBox1.setTitle(drivingGear[row], for: .normal)
chooseBox2.setTitle(drivingGear[row], for: .normal)
ChooseDrivingGear.isHidden = true
chooseBox1.isHidden = false //added (to prevent overlap)
ChooseDrivingGear2.isHidden = true
chooseBox2.isHidden = false //added (to prevent overlap)
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
ChooseDrivingGear.isHidden = false
ChooseDrivingGear2.isHidden = false
return false
}
//second pickerView
}
在委托方法中,检查 pickerView 的实例。您可以简单地使用 == 运算符甚至 switch case
来比较实例例如:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch pickerView {
case firstPickerView: //code here
case secondPickerView: //code here
default: break
}
}
确保您为所有选择器视图创建了插座,并且在您的 ViewController 中可用,例如我在上面提到的。 firstPickerView, secondPickerView 等等
发生这种情况的原因是您没有检查选择器视图委托方法中现在更改了哪个选择器视图
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == ChooseDrivingGear {
//do staf for first picker
} else {
//do staf for second one
}
}
或者使用标签更好
override func viewDidLoad() {
ChooseDrivingGear.isHidden = true
ChooseDrivingGear.delegate = self
ChooseDrivingGear.dataSource = self
ChooseDrivingGear.tag = 0
ChooseDrivingGear2.isHidden = true
ChooseDrivingGear2.delegate = self
ChooseDrivingGear2.dataSource = self
ChooseDrivingGear2.tag = 1
super.viewDidLoad()
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 0 {
//do staf for first picker
} else {
//do staf for second one
}
}
p.s 同样在 Swift 中,方法和变量应以小写字母开头。