代码之家  ›  专栏  ›  技术社区  ›  blakejet1

UIPickers数据将不会从UITextField显示

  •  0
  • blakejet1  · 技术社区  · 10 年前

    我是斯威夫特的新手,但我觉得我能很好地掌握它。

    我有四个UITextField和InputView,它们显示UIPickerViews,我通过编程将它们放置在应用程序中。我的代码没有显示任何错误,所有UIPickerViews都会弹出(picker、picker2、picker 3、picker.4),但只有来自“climate”的数组显示在所有四个视图中。因此,我明显的问题是……我如何让剩余的数组(环境、区域、预算)显示在他们尊敬的UIPickerViews中!

    此外,side请求,我如何禁用文本字段,以便没有人能够将任何内容粘贴到文本字段中

    这是我的代码:

    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.
    }
    
    
    }
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Michael Dautermann    10 年前

    我不喜欢使用标签( see point 2 here ),但为了让你克服这个问题 didSelectRow 函数来执行此操作:

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

    你的问题很简单,你没有从用户刚刚创建的部分的选择器视图中看到标签。