我当时使用函数作为@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)
}