Ios 同一UIView中的多个UIPickerView

Ios 同一UIView中的多个UIPickerView,ios,swift,uipickerview,Ios,Swift,Uipickerview,我是iOS开发的初学者,我想创建一个小的iOS应用程序。在这个应用程序中,3UIPickerViews应该显示不同的数据 我的问题在显示屏上。我习惯在Android或Windows phone上开发,不知道如何用不同的数据填充UIPickerViews 这是我已经编写的代码: // // ViewController.swift // iphoneVersion // // Created by fselva on 13/05/2015. // Copyright (c) 2015 fs

我是iOS开发的初学者,我想创建一个小的iOS应用程序。在这个应用程序中,3
UIPickerViews
应该显示不同的数据

我的问题在显示屏上。我习惯在Android或Windows phone上开发,不知道如何用不同的数据填充
UIPickerViews

这是我已经编写的代码:

//
//  ViewController.swift
//  iphoneVersion
//
//  Created by fselva on 13/05/2015.
//  Copyright (c) 2015 fselva. All rights reserved.
//

import UIKit



class ViewController: UIViewController, UIPickerViewDelegate{



@IBOutlet weak var pickerView1: UIPickerView!
@IBOutlet weak var pickerView2: UIPickerView!
@IBOutlet weak var pickerView3: UIPickerView!

var test = ["Todo","Waiting","Maybe","Inbox","Note"]

var test2 = ["@Office","@Computer","@Home","@Meeting", "@Read", "@Achat", "@Call"]



override func viewDidLoad() {
    super.viewDidLoad()
    pickerView1.tag = 1
    pickerView2.tag = 2
    pickerView3.tag = 3
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfComponentsInPickerView(pickerView : UIPickerView!) -> Int{
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    if pickerView2.tag == 2 {
        return test.count
    } else if pickerView3 == 3{
        return test2.count
    }
    return 1
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

    if pickerView2 == 2 {
        return test[row]
    } else if pickerView3 == 3{
        return test2[row]
    }
        return ""
}


}
@IBOutlet弱变量pickerview w1:UIPickerView

第一个
UIPickerView
当前应不显示任何内容。第二个显示
test
,第三个显示
test2

在互联网上经过数小时的调查后,我听说了一些标签来定义谁必须显示什么,但它不起作用


我是否做错了什么,我是否遗漏了什么?

您不需要标签,只需使用:

 func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        if pickerView == pickerView1 {
            //pickerView1
        } else if pickerView == pickerView2{
           //pickerView2
        }
另外,不要忘记在IB或代码中设置委托:

pickerView1.delegate = self

您正在将实例与标记进行比较

替换:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    if pickerView2 == 2 {
        return test[row]
    } else if pickerView3 == 3{
        return test2[row]
    }
        return ""
}
与:

不管怎样,你不需要给你的拣选者贴标签。选择器位于datasource和delegate方法中。您可以比较实例。大概是这样的:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    if pickerView2 == pickerView {
        return test[row]
    }
    if pickerView3 == pickerView {
        return test2[row]
    }
    return ""
}
试试这个:

class UserConfig:UIViewController、UIPickerViewDataSource、UIPickerViewDelegate{
@IBO弱var lblPeso:UILabel!
@IBLALTO:UILabel!
@IBV弱变量pickerView:UIPickerView!
@IBO弱var btPeso:UIButton!
@IBOUTLE弱var btAlto:UIButton!
脉冲电压=1
让userDefault=UserDefaults.standard
设pesoArray=[50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99,
100,101,102,103,104,105,106,107,108,109,
110,111,112,113,114,115,116,117,118,119,
120,121,122,123,124,125,126,127,128,120,
130]
让altoArray=[150151152153154155156157158159,
160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212]
重写func viewDidLoad(){
super.viewDidLoad()
pickerView.delegate=self
pickerView.dataSource=self
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
self.view.endEditing(true)
}
@iAction func volver(\发送方:任意){
self.disclose(动画:true,完成:nil)
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
如果pulsado==1{
返回altoArray.count
}否则{
返回pesoArray.count
}
}
func numberOfComponents(在pickerView:UIPickerView中)->Int{
返回1
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String{
如果pulsado==1{
返回字符串(格式:“%i”,altoArray[行])
}否则{
返回字符串(格式:“%i”,pesoArray[行])
}
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
如果pulsado==1{
lblAlto.text=字符串(格式:“%i”,altoArray[行])
}否则{
lblPeso.text=字符串(格式:“%i”,pesoArray[行])
}
}
@iAction func altoPressed(\发送方:任意){
脉冲数=1
重新加载所有组件()
}
@iAction func pOppressed(\发送方:任何){
脉冲数=2
重新加载所有组件()
}
}

这里是Swift 3中
文本字段中的完整源代码多UIPickerView

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

@IBOutlet weak var textFiel1: UITextField!

@IBOutlet weak var textFiel_2: UITextField!   


 let piker1 = UIPickerView()
 let piker2 = UIPickerView()

let country = ["Ban","Ind","PK"]
let number = ["1","2","3"]


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    piker1.dataSource = self
    piker1.delegate = self

    piker2.dataSource = self
    piker2.delegate = self


    piker1.tag = 1
    piker2.tag = 2;



     textFiel1.inputView = piker1
      textFiel_2.inputView = piker2


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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



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



    if pickerView == piker1 {
        return country.count

    } else if pickerView == piker2{
         return number.count
    }

    return 1
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {


    if pickerView == piker1 {
        return country[row]

    } else if pickerView == piker2{
         return number[row]
    }
    return ""
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == piker1 {
        textFiel1.text = country[row]
          self.view.endEditing(false)
    } else if pickerView == piker2{
        textFiel_2.text = number[row]
          self.view.endEditing(false)
    }
}

}

我建议在控制器中定义一个变量,然后根据字段选择确定值

func textFieldDidBeginEditing(_ textField: UITextField) {
        if(textField == self.txtAge){
            **isAgeField=0**
            self.pickUp(txtAge)
        }else{
            **isAgeField=1**
            self.pickUpTimezone(timezonetxt)
        }
    }`

then you can add condition inside the picker view as below 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
       if isAgeField == 1 {
            return timeZoneList.count
        }else {
            return arrAge.count
        }
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
        if isAgeField == 1 {
            return timeZoneList[row]
        }else {
            return arrAge[row] as? String
        }


    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        **if isAgeField == 1 {**
            timeZonepickerViewIndex = row
        }else  {
            selectedIndex = row
        }

    }

谢谢您的回答,我会检查代表是否理解您告诉我的内容。此外,我将尝试您所说的解决方案,thank.put pickerView1.delegate=self in viewDidLoad()易于实现,比创建新类更好。谢谢您的回答。错过的是代表。我在几个小时前尝试过这个方法,但没有成功,因为我没有执行pickerViewX.delegate=self。你的解决方案很好用。
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

@IBOutlet weak var textFiel1: UITextField!

@IBOutlet weak var textFiel_2: UITextField!   


 let piker1 = UIPickerView()
 let piker2 = UIPickerView()

let country = ["Ban","Ind","PK"]
let number = ["1","2","3"]


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    piker1.dataSource = self
    piker1.delegate = self

    piker2.dataSource = self
    piker2.delegate = self


    piker1.tag = 1
    piker2.tag = 2;



     textFiel1.inputView = piker1
      textFiel_2.inputView = piker2


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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



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



    if pickerView == piker1 {
        return country.count

    } else if pickerView == piker2{
         return number.count
    }

    return 1
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {


    if pickerView == piker1 {
        return country[row]

    } else if pickerView == piker2{
         return number[row]
    }
    return ""
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == piker1 {
        textFiel1.text = country[row]
          self.view.endEditing(false)
    } else if pickerView == piker2{
        textFiel_2.text = number[row]
          self.view.endEditing(false)
    }
}

}
func textFieldDidBeginEditing(_ textField: UITextField) {
        if(textField == self.txtAge){
            **isAgeField=0**
            self.pickUp(txtAge)
        }else{
            **isAgeField=1**
            self.pickUpTimezone(timezonetxt)
        }
    }`

then you can add condition inside the picker view as below 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
       if isAgeField == 1 {
            return timeZoneList.count
        }else {
            return arrAge.count
        }
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
        if isAgeField == 1 {
            return timeZoneList[row]
        }else {
            return arrAge[row] as? String
        }


    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        **if isAgeField == 1 {**
            timeZonepickerViewIndex = row
        }else  {
            selectedIndex = row
        }

    }