addProductToCartButton

addProductToCartButton

我当时使用函数作为@IBAction,但现在我想将其用作常规函数。但是问题是,当我尝试调用该函数时,它正在询问我发件人,并期望将UIButton作为参数。
如何删除该发件人,使其不影响我的功能?

这是我的功能:

func addProductToCartButton(_ sender: UIButton) {
    // Start animation region
    let buttonPosition : CGPoint = sender.convert(sender.bounds.origin, to: self.productsTableView)

    let indexPath = self.productsTableView.indexPathForRow(at: buttonPosition)!

    let cell = productsTableView.cellForRow(at: indexPath) as! ProductTableViewCell

    let imageViewPosition : CGPoint = cell.productImageView.convert(cell.productImageView.bounds.origin, to: self.view)

    let imgViewTemp = UIImageView(frame: CGRect(x: imageViewPosition.x, y: imageViewPosition.y, width: cell.productImageView.frame.size.width, height: cell.productImageView.frame.size.height))

    imgViewTemp.image = cell.productImageView.image

    animationProduct(tempView: imgViewTemp)

    // End animation region
}

这是我需要调用该函数的地方:
func didTapAddToCart(_ cell: ProductTableViewCell) {
    let indexPath = self.productsTableView.indexPath(for: cell)
        addProductToCartButton( expecting UIBUTTON parameter)
    }

我试图将发送者设置为nil,但无法正常工作。你有什么主意吗?

最佳答案

您需要重构代码。 addProductToCartButton的当前实现使用发送方(按钮)来确定索引路径。然后,其余代码基于该索引路径。

然后,您有了didTapAddToCart方法,该方法尝试调用addProductToCartButton,但此时您没有按钮,但它确实具有索引路径。

我将创建一个新函数,将索引路径作为其参数。它的实现是addProductToCartButton中的大多数现有代码。

这是新功能(主要是原始的addProductToCartButton代码):

func addProduct(at indexPath: IndexPath) {
    let cell = productsTableView.cellForRow(at: indexPath) as! ProductTableViewCell

    let imageViewPosition : CGPoint = cell.productImageView.convert(cell.productImageView.bounds.origin, to: self.view)

    let imgViewTemp = UIImageView(frame: CGRect(x: imageViewPosition.x, y: imageViewPosition.y, width: cell.productImageView.frame.size.width, height: cell.productImageView.frame.size.height))

    imgViewTemp.image = cell.productImageView.image

    animationProduct(tempView: imgViewTemp)

    // End animation region
}

然后将addProductToCartButton重做为:
func addProductToCartButton(_ sender: UIButton) {
    // Start animation region
    let buttonPosition : CGPoint = sender.convert(sender.bounds.origin, to: self.productsTableView)

    let indexPath = self.productsTableView.indexPathForRow(at: buttonPosition)!

    addProduct(at: indexPath)
}

最后,更新didTapAddToCart:
func didTapAddToCart(_ cell: ProductTableViewCell) {
    let indexPath = self.productsTableView.indexPath(for: cell)
    addProduct(at: indexPath)
}

08-18 07:31