【问题标题】:How to create an array of UITextField objects in Swift?如何在 Swift 中创建 UITextField 对象数组?
【发布时间】:2016-09-28 19:20:44
【问题描述】:

我正在使用 Swift 开发一个应用程序。在开始时,我提供了一些我想添加的输入。在下一个视图中,我创建了与第一个视图中定义的一样多的 UITextFields。按下按钮后,我在存储 TextFields 中的所有这些值时遇到了问题。在我看来,最有效的解决方案是创建一个 UITextFields 数组并将 TextField 的每个值添加到数组中,然后在按钮中将所有 TextFields 中的值添加到数组中。不幸的是,它不起作用。有什么建议么?提前致谢。

override func viewDidLoad() {
    super.viewDidLoad()

    var counter =  0
    for i in 1...mainInstance.numberOfInputs
    { 

    super.viewDidLoad()       
    array.insert(UITextField(frame: CGRect(x: 0, y: 50, width: 60, height: 20)), at: i)
    array[i].center = CGPoint(x: 200,y: 50 + counter)
    array[i].textAlignment = NSTextAlignment.center
    array[i].layer.borderWidth = 1
    array[i].layer.borderColor = UIColor.black.cgColor
    self.outletScrollView.addSubview(array[i])
    counter += 50

    }

    super.viewDidLoad()
    let button = UIButton(type: .system) // let preferred over var here
    button.frame = CGRect(x: 200, y: 50 + counter, width: 100, height: 20)
    button.setTitle("Recalculate", for: UIControlState.normal)
    button.addTarget(self, action: "actionRecalculate:", for: UIControlEvents.touchUpInside)
    self.outletScrollView.addSubview(button)
    outletScrollView.contentInset = UIEdgeInsetsMake(0, 0, CGFloat(counter+100), 0)
}

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案1】:

    您可以通过以下方式轻松创建:

    let textFields = [UITextField]()
    

    您应该考虑使用UIScrollView,(如您的示例)或(我认为更好的主意)UITableView 来添加您的UITextfields。所以你有多个 Rows,每一行都有一个 UITextField。您可以轻松自定义行数/文本字段(例如,从您的 FirstViewController 中获取)。

    只需创建一个自定义UITableViewCell - 添加一个UITextField 并连接IBOutlet。要从每个 UITextField 获取值,您可以遍历所有单元格,并读出值。如果您需要更多帮助,请询问。

    【讨论】:

    • 目前 UIScrollView 一切正常。也许我也会尝试用 UITableViewCell 创建版本。
    • 所以一切正常?你成功创建了一个 UITextFields 数组?
    • 是的,几乎所有内容都正确编写。我在声明 UITextFields 数组时只犯了一个简单的错误。感谢您的帮助!
    • 接受!我也投了赞成票,不幸的是我的声望不到 15。
    【解决方案2】:

    可以通过这种方式创建 UITextfield 数组

    // Create an empty array of type UITextField
    var listOfTextFields : [UITextField] = []
    
    // In viewDidLoad, create a textfield and add it to the array
    override func viewDidLoad() {
        super.viewDidLoad()
    
        for i in 0...mainInstance.numberOfInputs-1 {
            let textField = UITextField((frame: CGRect(x: X, y: Y*i, width: yourWidth, height: yourHeight)))
            textField.delegate = self
            listOfTextFields.append(textField)
        }
    }
    

    在这个 UITextField 设置中,我没有考虑任何格式来缩短答案。

    【讨论】:

      【解决方案3】:

      虽然这可能不适用于确切的用例,但它可以帮助具有类似用例的其他人(特别是以编程方式创建的文本字段或自定义 uicell)。

      txtfield.tag = indexPath.row // or other int
      

      然后在数组初始化和委托后实现文本域 didEndEditing

      @IBAction func endedEditing(_ sender: UITextField) {
          arr[sender.tag] = sender.text
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多