2016-03-22 9 views
0

Swift’in yeni sürümüyim ama sanırım onu ​​iyi bir şekilde seçiyorum.UIPickers verileri UITextField'den gösterilmeyecek.

UIPickerViews öğesini görüntüleyen InputView'larla dört UITextField var ve bunları program içinde programlı olarak yerleştirdim. Kodum hata göstermiyor, tüm UIPickerView'lar açılır (seçici, picker2, picker3, picker4), ancak yalnızca "iklim" dizisi dört görünümde gösterilir. Bu yüzden benim bariz meselem ... dünyadaki saygın UIPickerView'larda kalan dizileri (çevre, bölge, bütçe) nasıl alacağım? Ben değilim

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

Belki de farklı textField üzerine tıkladıktan sonra yeniden bileşenini yeniden yüklemeniz yeterlidir. – Lee

cevap

0

: kimse metin alanına İşte

içine herhangi bir şey yapıştırmak mümkün diye

da, yan isteği, nasıl metin alanı devre dışı olur benim kodudur kullanarak etiketleri hayranıyım (see point 2 here), ancak bu soruna geçmiş olsun, yerine bunu yapmak için didSelectRow işlevini değiştirin:

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

senin sorunun SIMP ly, kullanıcının sadece bir bölüm oluşturduğu seçici görüntüden etiketi görmeyi istemiyor olsaydınız.

+0

Bunu yapmayı hiç düşünmemiştim! Ama elbette, kodu değiştirip test ettiğimde ... Xcode güncellemeye başladı! Sorunumu çözerse, bu gece seni güncel tutacağım. Sağol Michael! – blakejet1

+0

Etiketlerin yerine, Textfields'dan Picker'ları görüntülemek için daha iyi bir seçenek olarak tercih edersiniz? – blakejet1

+0

"pickerView == picker2'" ve "' pickerView == picker3' ise ", kullanıcının hangi seçiciden bir değer seçtiğini belirlemek için yapabilirsiniz. Daha da iyisi, * Seçici özelliklerinin ismini 'picker3' gibi tanımlayıcı isimlerden 'budgetPicker' gibi bir şeye dönüştürür. –