如何从 UITableView 中的 UITableViewCells 中的 UITextFields 中获取文本并将它们放入数组中(Swift 3)?
Posted
技术标签:
【中文标题】如何从 UITableView 中的 UITableViewCells 中的 UITextFields 中获取文本并将它们放入数组中(Swift 3)?【英文标题】:How can I take the text from UITextFields in UITableViewCells in a UITableView and put them into an array (Swift 3)? 【发布时间】:2016-11-15 08:00:31 【问题描述】:我正在制作一个计算器应用程序,其中包含一个 UITableView,它允许用户在单击计算器 UIButton 执行计算之前输入变量。我想使用 UITableView 而不仅仅是计划 UITextFields 的原因是因为我的应用程序包含许多不同的计算,这意味着 UITableViewCells 的数量会根据用户的选择而变化。
每当按下计算器 UIButton 时,我希望找到一种方法来获取可见 UITextField 值的数组。 UITableView 类似乎更适合将数据输入单元格而不是获取。我可以使用其他方法吗?我正在使用一个带有 Swift 3 文件的故事板。
【问题讨论】:
表格视图中有多少个 UITextField?可以分享一下tableview的屏幕截图吗? 您使用的是数据,而不是视图,请记住,一旦用户在单元格的文本字段中输入内容,请立即将其存储在endEditting
的数据源中,然后从那里
能否提供Controller类的详细信息。我通常用一个可以读写的数组来支持 UITableView。数组索引和 UITableViewCell 索引匹配,因此我可以根据数组中的项目识别 UITableView 中的每一行。
【参考方案1】:
由于您没有提供一些示例代码,我将在这里做很多假设。
假设您使用的是 UIViewController
,其中包含 UITableView
class CalculatorViewController
@IBOutlet var tableView: UITableView!
var values: [Double] = []
override func viewDidLoad()
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
现在你有了一个基本的 viewController 但编译器会说 CalculatorViewController 不符合UITableViewDataSource
和UITableViewDelegate
。让我们解决这个问题
extension CalculatorViewController: UITableViewDataSource
func numberOfSections(in tableView: UITableView) -> Int
// return your number of sections, let say it's one
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// Let's say you only have 3 cells at the moment
return 3
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "YourCustomInputFieldCell") as! YourCustomInputFieldCell
return cell
让我们修复UITableViewDelegate
错误
extension CalculatorViewController: UITableViewDelegate
// This one gets called each time a cell will be displayed (as it says)
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
if let cell = cell as? YourCustomInputTextField
// I assume that you expose your cell's input field
// By setting a tag on the input field you can
// distinguish it from other inputs
cell.input.tag = indexPath.row
cell.input.delegate = self
编译器会再次抱怨CalculatorViewController
不符合UITextFieldDelegate
。让我们也解决这个问题。
extension CalculatorViewController: UITextFieldDelegate
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
// Here you can check the tag of the textField
// and update the values array accordingly
// You should probably convert the string that you get to
// the number format that you want
return true
希望对你有帮助。
【讨论】:
感谢您提供翔实的回答。 UITextFieldDelegate 是我缺少的部分。 @Kalchi25 欢迎您!如果对您有帮助,请随时接受答案以上是关于如何从 UITableView 中的 UITableViewCells 中的 UITextFields 中获取文本并将它们放入数组中(Swift 3)?的主要内容,如果未能解决你的问题,请参考以下文章
UIViewController 内的 UITableView? [关闭]
如何根据 UITableView 滚动动态调整 UITableViewCell 的大小?