我是iOS开发人员的完全初学者,我想创建一个小iOS应用程序。在此应用程序中,3 UIPickerViews
应显示不同的数据。
我的问题在显示屏上。我曾经在Android或Windows手机上开发过,我不了解如何使用不同的数据填充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 weak var pickerView1: UIPickerView!
已通过Ctrl + Click从故事板自动创建到ViewController.swift。
第一个UIPickerView
目前应该什么都不显示。第二个应该显示test
,第三个显示test2
。
在互联网上经过数小时的调查后,我听说过标签来定义谁必须展示什么,但它不起作用。
我做错了什么,我在某处错过了什么?
答案 0 :(得分:54)
您不需要标签,只需使用:
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if pickerView == pickerView1 {
//pickerView1
} else if pickerView == pickerView2{
//pickerView2
}
也不要忘记在IB或代码中设置委托:
pickerView1.delegate = self
答案 1 :(得分:2)
您正在将实例与代码进行比较。
替换:
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 ""
}
使用:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if pickerView2.tag == 2 {
return test[row]
} else if pickerView3.tag == 3 {
return test2[row]
}
return ""
}
无论如何,你不需要标记你的拣货员。选择器来自数据源和委托方法。您可以比较实例。像这样:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if pickerView2 == pickerView {
return test[row]
}
if pickerView3 == pickerView {
return test2[row]
}
return ""
}
答案 2 :(得分:2)
这是Swift 3中TextField
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)
}
}
}
答案 3 :(得分:0)
我建议在控制器中定义一个变量,然后根据字段选择确定值
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
}
}
答案 4 :(得分:-1)
试试这个:
class UserConfig: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var lblPeso: UILabel!
@IBOutlet weak var lblAlto: UILabel!
@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var btPeso: UIButton!
@IBOutlet weak var btAlto: UIButton!
var pulsado = 1
let userDefault = UserDefaults.standard
let 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]
let altoArray = [150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
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]
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate = self
pickerView.dataSource = self
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
@IBAction func volver(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pulsado == 1 {
return altoArray.count
} else {
return pesoArray.count
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pulsado == 1{
return String(format: "%i", altoArray[row])
}else{
return String(format: "%i", pesoArray[row])
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pulsado == 1 {
lblAlto.text = String(format: "%i", altoArray[row])
} else {
lblPeso.text = String(format: "%i", pesoArray[row])
}
}
@IBAction func altoPressed(_ sender: Any) {
pulsado = 1
pickerView.reloadAllComponents()
}
@IBAction func pesoPressed(_ sender: Any) {
pulsado = 2
pickerView.reloadAllComponents()
}
}