从自定义表视图单元

时间:2017-06-23 16:13:06

标签: php ios objective-c xcode uitableview

项目从服务器加载到动态表格视图中...我需要发回通过文本字段输入的每个项目的数量编号。我无法为文本字段创建一个插座,因为它给了我错误:插座无法连接到重复内容。

我还尝试使用标记(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是在文本字段中输入的值

请参阅我已关联的图片

image

image

4 个答案:

答案 0 :(得分:1)

对我来说通知表视图单元格更改的一些方法是为表视图单元定义protocol以通知其更改并在视图控制器中实现协议,将通知这些更改

  1. 定义协议。
  2. 在视图控制器中实现protocol
  3. 在表格视图单元格中定义protocol类型的成员。
  4. UITableView cellForRowAt或任何方便的方法中,将protocol类型的表格视图单元格成员设置为self(即实现protocol的视图控制器)。
  5. 使用此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方法