【问题标题】:How to build a variable from another variable如何从另一个变量构建一个变量
【发布时间】:2015-04-30 04:11:21
【问题描述】:

我希望标题有意义,但我想做的是从我的 dataPicker 中为 item selected 变量设置一个字段值。当只有一个字段要设置但我的项目将在每个视图上有多个字段时,我已经能够完成这项工作,这些字段将根据它是什么字段从 dataPicker 调用数据。我希望这很清楚。也许当您查看代码时,它会。

我已经建立了一个测试项目,以将事情限制在这个问题上。因此,我的变量告诉视图要在 dataPicker 中填充的数组是季节还是运动。将从季节/运动数组接收数据的字段是 enterSeason 和 enterSport。 When the picker has returned a value from season, I want to combine it with enter to create the var enterSeason to set that == itemSelected.这种语言对我来说非常新,所以我正在尝试我以前使用的唯一方法将文本和变量组合在一个值中。这显然是行不通的。感谢您的帮助。

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UIGestureRecognizerDelegate {

    @IBOutlet var enterSeason: UITextField!

    @IBOutlet var enterSport: UITextField!

    var dataPickerView = UIPickerView()
    var season = ["2013", "2014", "2015"] //multi-season
    //var season = ["2015"] //single-season
    var sport = ["Baeball", "Football", "Basketball", "Hokey"]
    var activeField = []

    override func viewDidLoad() {
        super.viewDidLoad()

        enterSeason.inputView = dataPickerView
        dataPickerView.delegate = self
        dataPickerView.dataSource = self

    }

    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 {
        return activeField.count
    }
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return activeField[row] as! String
    }
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        var itemSelected = activeField[row] as! String
        self.enter"\activeField".text = itemSelected
    }
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    编辑: 你如何显示和隐藏选择器?您的代码只显示变量声明和委托方法...答案可能会有所不同..

    由于您将选择器显示为文本字段的输入视图,因此为这些文本字段中的每一个设置 UITextFieldDelegate .. 并在 textFieldDidBeginEditing 中使用简单的 if else 检查哪个字段变为活动状态

    func textFieldDidBeginEditing(textField: UITextField) {
        if textField === enterSeason {
            activeField = season
        }
        else if textField === enterSport {
            activeField = sport
        }
    }
    

    并且在选择器选择器中,根据当前的activeField对象设置相关文本字段的值

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if activeField === season {
            enterSeason.text = season[row] as! String
        }
        else if activeField === sport {
            enterSeason.text = sport[row] as! String
        }
    }
    

    在 storboard/xib 中为您的文本字段设置委托:

    附言 - 将activeField 重命名为activeDataArray 或更合适的名称

    编辑 2:正如您所提到的,我在下面提到的第二种方法不适合您,因为这些字段太多,我仍然将其作为答案的一部分,因为它可能对其他人有所帮助 em>

    但是您要实现的目标非常简单,而且方法太复杂/怪异。所以这是另一种实现整个事情的方法..

    最简单(但可能仍然不是最好)的方法是为每个字段设置两个 UIPickerView 实例。您可以在 if else 块中直接检查 pickerView == seasonPickerView 或 pickerView == sportPickerView 并进行条件编程,您将不需要 activeField 变量..

    【讨论】:

    • @luka 我实际上在视图中没有选择器,它是使用以下代码以编程方式创建的 enterSeason.inputView = dataPickerView dataPickerView.delegate = self dataPickerView.dataSource = self 然后当点击该字段时,选择器出现并填充了适当的数据。在多个竞争中将有 3 到 7 个这样的字段,因此为每个字段设置多个选择器的想法不是解决方案。有没有办法捕获点击哪个字段来激活选择器,然后我可以根据点击的字段设置 activeField var?
    • 我已经尝试过您的解决方案,我认为它会起作用,但我没有正确实施。我尝试将 UITextFieldDelegate 设置为 class DispenseScreen1ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate { 但您说了一些关于为每个字段设置的内容。我怎么做?选择器根本没有填充,所以我认为这可能是问题所在。
    • 另外,在选择器选择器中,当我说 if activeDataArray === sport { enterSport.text = sport[row] as! String 时,我的第二个 else if { 语句中出现错误。我只收到一条错误,上面写着“二进制运算符'==='不能应用于'NSArray'和'[String]'类型的操作数。所有其他else if {语句,使用相同的语法不但返回错误。建议?
    • 我添加了一个屏幕截图来帮助您了解设置 UITextFieldDelegate .. 您必须为每个文本字段执行此操作。
    • 感谢您的参考。我会看看。学习,学习,学习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多