2015-05-14 3 views
8

Ich bin ein kompletter Anfänger auf iOS-Dev und ich möchte eine kleine iOS-Anwendung erstellen. In dieser Anwendung sollen 3 UIPickerViews verschiedene Daten anzeigen.Mehrere UIPickerView in der gleichen UIView

Mein Problem ist auf dem Display. Ich bin es gewohnt, Android oder Windows Phone zu entwickeln und ich verstehe nicht, wie man die UIPickerViews mit verschiedenen Daten bevölkern kann.

Dies ist der Code, den ich schon geschrieben habe:

// 
// 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! wurde von Strg + automatisch erstellt aus dem Storyboard Klicken Sie auf die ViewController.swift.

Die erste UIPickerView soll derzeit nichts anzeigen. Der zweite soll test anzeigen und der dritte zeigt test2 an.

Nach Stunden der Untersuchung im Internet habe ich über Tags zu definieren, wer muss was anzeigen, aber es funktioniert nicht.

Mache ich etwas falsch, vermisse ich irgendwo etwas?

Antwort

33

Sie haben keine Tags benötigen, verwenden Sie einfach:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     if pickerView == pickerView1 { 
      //pickerView1 
     } else if pickerView == pickerView2{ 
      //pickerView2 
     } 

auch nicht vergessen, Delegierter in IB oder in Code zu setzen:

pickerView1.delegate = self 
+0

Vielen Dank für Ihre Antwort, Ich werde überprüfen, welcher Delegierte versteht, was du mir gesagt hast. Außerdem werde ich die Lösung, die du sagst, versuchen, danke. – fselva

+0

Put PickerView1.delegate = Selbst in ViewDidLoad() – ChikabuZ

+0

Ok es funktioniert wie ein Charme, ich verpasste nur die Delegierten ..... Vielen Dank! – fselva

0

Sie Instanzen mit Tags zu vergleichen.

ersetzen:

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 "" 
} 

mit:

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 "" 
} 

Wie auch immer, Sie brauchen nicht Ihre Kommissionierer zu markieren. Die Picker kommen in die Datenquelle und delegieren Methoden. Sie können Instanzen vergleichen. Etwas wie folgt aus:

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

danke für deine Antworten. Was verpasst wurde, war der Delegierte. Ich habe das vor ein paar Stunden versucht und es hat nicht funktioniert, weil ich pickerViewX.delegate = self nicht getan habe. Ihre Lösung funktioniert gut. – fselva

-1

Versuchen Sie folgendes:

enter image description here

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() 

    } 
} 
0

Hier ist die komplette Quelle Multiple UIPickerView im TextField in 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) 
    } 
} 

}