如何在 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