使用委托

时间:2017-02-09 00:32:12

标签: swift uitableview uibutton uitextfield tableviewcell

我在UIView里面有一个tableView,这个tableview有三个按钮,一个已经工作了,绿色XI也有两个按钮来增加和减少文本域中的值到右边,这些是我需要的帮助。

enter image description here

单元格中按钮的@IBActions调用单元格的Superview中的委托函数,带有绿色X的按钮已经在工作,做了它应该做的事情,但我现在需要做的是如何编程增加/减少产品数量(Cantidad)的按钮的行为,我的委托功能已经在处理数据,但现在我需要它们来处理Cantidad TextField值,这样当用户按下按钮时,cantidadTextField .text已更新。

我只需要知道如何从托管TableVIew的类中访问单元格内的cantidadTextField.text属性。

我可以在创建单元格时在CellForRowAtIndexPath方法中执行此操作,但我需要在委托方法中执行此操作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为什么要尝试从tableviewcontroller更新textField?根据我的理解,您在问题中发布的图像将是一个合适的视图,不是吗? (除了" Productos"标题)

最好的方法是管理uitableviewcell中的所有这些行为。我的意思是更新控制器内每个@IBAction的uitextfield。如下所示:

@IBAction func plusPressed() { 
   let previousAmount = Int(cantidadTextField.text!)
   cantidadTextField.text = "\(previousAmount + 1)"
}

@IBAction func minusPressed() { 
   let previousAmount = Int(cantidadTextField.text!)

   guard let previousAmount > 1 else { return }

   cantidadTextField.text = "\(previousAmount - 1)"
}

如果无法完成此方法并且必须从控制器更新它,则可以在控制器中的变量中创建对单元格的引用。但要注意,由于细胞重复使用,这个细胞可能会被重复用于另一个细胞产品"之后滚动时,例如。

也许使用一些代码我们可以更好地看到问题!

答案 1 :(得分:0)

<强>解决

我需要做的是直接从单元格访问文本字段,更新文本字段的值,然后调用委托,然后更新数据。

这是其中一种方法。

@IBAction func increaseAmount(_ sender: UIButton) {

    let cantidadStr = cantidadProducto.text

    if let cantidadInt = Int(cantidadStr!) {
        var cantidad = cantidadInt
        cantidad += 1
        let strCantidad = String(cantidad)

        cantidadProducto.text = strCantidad
    }

    self.delegate?.increaseProductQuantityTapped(sender: self, at: indexPath)

}

另一个

@IBAction func decreaseAmount(_ sender: UIButton) {

    let cantidadStr = cantidadProducto.text

    if let cantidadInt = Int(cantidadStr!) {
        var cantidad = cantidadInt
        if cantidad > 1 {
            cantidad -= 1
            let strCantidad = String(cantidad)

            cantidadProducto.text = strCantidad

            self.delegate?.decreaseProductQuantityTapped(sender: self, at: indexPath)
        } else {
            return
        }
    }
}