项目从服务器加载到动态表格视图中...我需要发回通过文本字段输入的每个项目的数量编号。我无法为文本字段创建一个插座,因为它给了我错误:插座无法连接到重复内容。
我还尝试使用标记(UITextField *countTextfield = (UITextField *)[cell viewWithTag:4];
)引用文本字段,但这并没有获取我输入的值。
当我点击Save Count时,我想以表格形式发回json:
{ “InventoryID”: “1231”, “manual_quantity”:234} { “InventoryID”: “232”, “manual_quantity”:23} { “InventoryID”: “214”, “manual_quantity”:1241} { “InventoryID”: “241”, “manual_quantity”:1123241}
其中manual_quantity是在文本字段中输入的值
请参阅我已关联的图片
答案 0 :(得分:1)
对我来说通知表视图单元格更改的一些方法是为表视图单元定义protocol
以通知其更改并在视图控制器中实现协议,将通知这些更改
protocol
。protocol
类型的成员。UITableView cellForRowAt
或任何方便的方法中,将protocol
类型的表格视图单元格成员设置为self
(即实现protocol
的视图控制器)。使用此protocol
机制,表格视图单元格可以将实际值的更改通知实现protocol
的任何类。
使用CellDelegate
协议的伪代码:
在视图控制器中:
// View controller
protocol CellDelegate {
func updateQuantity(inventory: String, quantity: Int)
}
class MyUIViewController: UIViewController, CellDelegate {
func updateQuantity(inventory: String, quantity: Int) {
// Update quantity for given inventory
}
}
在表格视图单元格中:
public class MyCell: UITableViewCell {
...
@IBOutlet weak var inventory: UIText!
@IBOutlet weak var quantity: UIText!
var cellDelegate: CellDelegate?
// Table view cell
@IBAction func textChanged(_ sender: Any) {
// inventory and quantity being outlets in the table view cell.
cellDelegate.updateQuantity(inventory, quantity)
}
道歉伪代码有点太快了。
答案 1 :(得分:0)
首先在cellForRowAtindexPath中设置标记到textField。 并将委托设置为textField。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CELL", for: indexPath) as! TableViewCell
cell.textField.tag = indexpath.row
cell.textField.delegate = self
return cell
}
现在,在用户写入时,使用Tag从textField获取数据。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let result = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) ?? string
let Dic:NSMutableDictionary = YourArrayName.object(at: textField.tag) as! NSMutableDictionary
Dic.setValue(result, forKey: "InventoryID")
YourArrayName.replaceObject(at: textField.tag, with: Dic)
return true
}
答案 2 :(得分:-1)
您可以在自定义单元格中使用块属性。在那里,您可以通过textFieldDidEndEditing
方法回调来发送数据。
答案 3 :(得分:-1)
您可以通过UITextFieldDelegate协议的委托方法将文本存储到任何可变数组中。如下方法。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//when you press return key it will save the text to your mutable array
textField.endEditing(true)
self.textFieldValueArray.add(textField.text!)
return true
}
并在你的tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)委托方法中使用
cell.textField.delegate = self
如下所示。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CELL", for: indexPath) as! TableViewCell
cell.textField.delegate = self
return cell
}
最后您可以使用下面的文字值。
@IBAction func btnPressed(_ sender: Any) {
//here textFieldValueArray is a mutable array
for each in textFieldValueArray {
print(each)
}
}
最后,你可以使用几个符合你目的的UITextFieldDelegate方法