私は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 weak var pickerView1: UIPickerView!
は、ストーリーボードからViewController.SwiftへのCtrl +クリックによって自動的に作成されました。
最初のUIPickerView
は現在何も表示しないはずです。 2番目のものはtest
を表示し、3番目のものはtest2
。
インターネットで何時間も調査した後、誰が何を表示する必要があるかを定義するタグについて聞いたことがありますが、機能しません。
私は何か間違ったことをしていますか、どこかで何かを逃していますか?
タグは必要ありません。次を使用してください。
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if pickerView == pickerView1 {
//pickerView1
} else if pickerView == pickerView2{
//pickerView2
}
また、IBまたはコードでデリゲートを設定することを忘れないでください。
pickerView1.delegate = self
Swift 3のTextField
にあるフルソースの複数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 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 ""
}
コントローラで変数を定義し、フィールドの選択に基づいて値を決定することをお勧めします
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
}
}