ios - 如何从另一个变量构建一个变量

标签 ios swift

我希望标题有意义,但我想做的是将字段值设置为从我的 dataPicker 中选择的项目变量。当只有一个字段需要设置时,我已经能够完成这项工作,但我的项目将在每个 View 上有多个字段,这些字段将根据字段的字段从 dataPicker 调用数据。我希望这是清楚的。也许当你查看代码时就会发现。

我已经建立了一个测试项目来将事情仅限于这个问题。因此,我的变量告诉 View 在 dataPicker 中填充的数组是季节还是运动。将从 season/sport 数组接收数据的字段是 EnterSeason 和 EnterSport。当选择器返回季节值时,我想将其与 Enter 结合起来创建 var EnterSeason 来设置 == 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
    }
}

最佳答案

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

由于您将选择器显示为文本字段的输入 View ,因此为每个文本字段设置 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 中为您的文本字段设置委托(delegate):

enter image description here

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

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

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

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

关于ios - 如何从另一个变量构建一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958849/

相关文章:

ios - Safari 和 iOS 上的 Html5(音频)

ios - 我可以对NSComparisonResult使用'> ='吗?

swift - 用户登录到不同的 View Controller 后刷新主视图 Controller

ios - XCUITest:在 TableView 中查找 CollectionView 失败

ios - NSURLSession().dataTaskWithRequest(...) 不能抛出?

objective-c - 将复杂的 Objective-C 宏转换为 swift

swift - UITextField 在 Swift 中设置最大字符长度

objective-c - objective-c : making point Larger through long press

ios - UITableViewCell 自动高度基于 UILabel 文本的数量

ios - 如何在iTunes Connect中将状态为 “Prepare for Submission”的当前版本应用替换为新版本?