如何在 Swift 中创建 UITextField 对象数组?

Posted

技术标签:

【中文标题】如何在 Swift 中创建 UITextField 对象数组?【英文标题】:How to create an array of UITextField objects in Swift? 【发布时间】: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)

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 Swift 中创建 UITextField 对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift 3中修复我的自定义UITextField对象?

如何在 UITableview 中创建具有 n 行数的 UITextField

我无法在 Swift iOS 中创建 UIResponder nextResponder

如何在表格单元格中创建UITextField成为第一响应者?

如何在 Swift 中创建私有函数? [复制]

如何在 Swift 中创建范围?