Je suis un débutant sur iOS dev et je veux créer une petite application iOS. Sur cette application, 3 UIPickerViews
sont supposés afficher des données différentes.
Mon problème est à l'écran. J'ai l'habitude de travailler sur Android ou Windows Phone et je ne comprends pas comment renseigner la UIPickerViews
avec des données différentes.
C'est le code que j'ai déjà écrit:
//
// 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!
a été automatiquement créé par Ctrl + Clic du storyboard au ViewController.Swift.
La première UIPickerView
est actuellement supposée ne rien afficher. Le second est censé afficher test
et le troisième affiche test2
.
Après des heures d’enquête sur Internet, j’ai entendu parler d’étiquettes permettant de définir qui doit afficher quoi, mais cela ne fonctionne pas.
Est-ce que je fais quelque chose de mal, est-ce que je manque quelque chose quelque part?
Vous n'avez pas besoin de tags, utilisez simplement:
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if pickerView == pickerView1 {
//pickerView1
} else if pickerView == pickerView2{
//pickerView2
}
de plus, n'oubliez pas de définir délégué dans IB ou dans le code:
pickerView1.delegate = self
Vous comparez des instances avec des balises.
Remplacer:
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 ""
}
avec:
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 ""
}
Quoi qu'il en soit, vous n'avez pas besoin de taguer vos préparateurs. Les sélecteurs entrent dans la source de données et les méthodes de délégation. Vous pouvez comparer les instances. Quelque chose comme ça:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if pickerView2 == pickerView {
return test[row]
}
if pickerView3 == pickerView {
return test2[row]
}
return ""
}
Voici UIPickerView Multiple Source Complète dans la TextField
dans Swift 3
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)
}
}
}