2016-03-22 1 views
0

Ich bin neu in Swift anzuzeigen, aber ich fühle mich wie ich es oben ziemlich gut bin Kommissionierung.UIPickers Daten werden nicht von UITextField

Ich habe vier UITextField mit InputView ist das Display UIPickerViews, und ich legte sie programmatisch innerhalb der App. Mein Code zeigt keine Fehler, alle UIPickerViews erscheinen (Picker, Picker2, Picker3, Picker4), aber nur das Array von "Klima" wird in allen vier Ansichten angezeigt. Also mein offensichtliches Problem ist ... wie in der Welt bekomme ich die verbleibenden Arrays (Umgebung, Region, Budget) in ihren respektierten UIPickerViews anzuzeigen!

auch, Seite Anfrage, wie würde ich das Textfeld deaktivieren, so dass niemand in der Lage sein könnte, etwas in das Textfeld

hier einzufügen ist mein Code:

import UIKit 

class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate { 

@IBOutlet weak var climateText: UITextField! 
@IBOutlet weak var environmentText: UITextField! 
@IBOutlet weak var regionText: UITextField! 
@IBOutlet weak var budgetText: UITextField! 

var picker = UIPickerView() 
var picker2 = UIPickerView() 
var picker3 = UIPickerView() 
var picker4 = UIPickerView() 


//MARK: Arrays for PickerViews 
var climates = ["Hot","Warm","Cold","Anywhere"] 
var environment = ["Beach","City","Mountain","Rural","Anywhere"] 
var region = ["Central America","Carribean","Europe","North America","South America","Anywhere"] 
var budget = ["$0-500","$501-1000","$1001-1500","$1501-2500","$2501 and up"] 


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

    picker.tag = 0 
    picker2.tag = 1 
    picker3.tag = 2 
    picker4.tag = 3 

    picker.delegate = self 
    picker2.delegate = self 
    picker3.delegate = self 
    picker4.delegate = self 

    picker.dataSource = self 
    picker2.dataSource = self 
    picker3.dataSource = self 
    picker4.dataSource = self 

    climateText.inputView = picker 
    environmentText.inputView = picker2 
    regionText.inputView = picker3 
    budgetText.inputView = picker4 
} 


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


func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if picker.tag == 0 { 
     return climates.count 
    } else if picker2.tag == 1 { 
     return environment.count 
    } else if picker3.tag == 2 { 
     return region.count 
    } else if picker4.tag == 3 { 
     return budget.count 
    } 
    return 1 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if picker.tag == 0 { 
     return climates[row] 
    } else if picker2.tag == 1 { 
     return environment[row] 
    } else if picker3.tag == 2 { 
     return region[row] 
    } else if picker4.tag == 3 { 
     return budget[row] 
    } 
    return "" 
} 


func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if picker.tag == 0 { 
     climateText.text = climates[row] 
    } else if picker2.tag == 1 { 
     environmentText.text = environment[row] 
    } else if picker3.tag == 2 { 
     regionText.text = region[row] 
    } else if picker4.tag == 3 { 
     budgetText.text = budget[row] 
    } 
} 


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


} 
+0

vielleicht brauchen Sie nur nach Klick auf verschiedenen Textfield reloadcomponent. – Lee

Antwort

0

Ich bin nicht ein Fan der Verwendung von Tags (see point 2 here), aber man Vergangenheit dieses Problem zu umgehen, ändern Sie Ihre didSelectRow Funktion diese stattdessen zu tun:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView.tag == 0 { 
     climateText.text = climates[row] 
    } else if pickerView.tag == 1 { 
     environmentText.text = environment[row] 
    } else if pickerView.tag == 2 { 
     regionText.text = region[row] 
    } else if pickerView.tag == 3 { 
     budgetText.text = budget[row] 
    } 
} 

Ihr Problem einfa Es war so, dass Sie nicht nach dem Tag aus der Auswahlansicht gesucht haben, mit dem der Benutzer gerade einen Abschnitt erstellt hat.

+0

Ich hätte nie gedacht, das zu tun! Aber natürlich, als ich den Code ändern und testen ... Xcode beginnt zu aktualisieren! Ich werde Sie heute Abend auf dem Laufenden halten, wenn das mein Problem löst. Danke, Michael! – blakejet1

+0

Anstelle von Tags, was würden Sie als eine bessere Option bevorzugen, um die Picker aus Textfeldern anzuzeigen? – blakejet1

+0

Sie tun können, „' wenn picker == picker2'“&„'wenn picker == picker3'“ zu bestimmen, welche Picker sehen die Benutzer nur einen Wert aus ausgewählt. Noch besser, * ändere den Namen * der Picker-Eigenschaften von nicht beschreibenden Namen wie 'picker3' in etwas wie' budgetPicker'. –