使用委托使用按钮更改 tableViewCell 内 UITextField 的值

Posted

技术标签:

【中文标题】使用委托使用按钮更改 tableViewCell 内 UITextField 的值【英文标题】:Changing the value of a UITextField inside a tableViewCell with a button using a delegate 【发布时间】:2017-02-09 00:32:11 【问题描述】:

我在 UIView 中有一个 tableView,这个 tableview 有三个按钮,一个已经在工作,它是绿色 X 我还有两个按钮来增加和减少右侧文本字段中的值,这些是我需要的帮忙。

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

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

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

感谢您的帮助!

【问题讨论】:

【参考方案1】:

你为什么要从 tableviewcontroller 更新 textField?据我了解,您在问题中发布的图像将是一个 uitableviewcell,不是吗? (“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)"

如果此方法无法完成并且您必须从控制器更新它,您可以在控制器的变量中创建单元格时保存对单元格的引用。但请注意,由于单元格重用,此单元格可能会在之后滚动时被重用于另一个“产品”。

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

【讨论】:

我不想直接从单元格更新 textField 的原因是因为我需要一个存储到加载到超级视图中的 plist 中的变量,所以如果我需要通过从超级视图到单元格的值我会增加额外的复杂性。我没有在控制器中创建变量的原因正是由于单元重用。我可以分享我的代码,但 View 非常复杂,因为 UIView 有三个自定义 TableView,每个都有不同的行为和不同的 Nib,具体取决于行为。【参考方案2】:

已解决

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

这是其中一种方法。

@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
        
    

【讨论】:

以上是关于使用委托使用按钮更改 tableViewCell 内 UITextField 的值的主要内容,如果未能解决你的问题,请参考以下文章

如何更改一个表格中按钮的颜色VIewCell [重复]

如何在不使用标签的情况下更改 tableviewCell 内的图像按钮

在 TableViewCell 中进行更改

使用委托从按钮传递信息以突出显示单元格

在 tableViewCell 内动态更改 UIImageView 的宽度和高度

TableViewCell Swift中的切换(复选框)按钮