gpt4 book ai didi

ios - 委托(delegate)函数在删除 CollectionView 项目 Swift 时无法正确调用

转载 作者:行者123 更新时间:2023-12-01 16:13:13 27 4
gpt4 key购买 nike

我创建了 PhotoCollectionViewController其中包含使用 Alamofire 从服务器获取的所有照片.现在我想在照片上实现删除功能。我用过tap-gesture为了它。创建自定义警报 Xib 并成功显示。自定义警报 xib 有两个按钮 cancelDelete .
在删除按钮上,我创建了委托(delegate),但由于某种原因,即使它没有正确调用,它也无法正常工作。其实我必须通过AppData?.imageList?[indexPath.row].projectUnitImageId这是从服务器中删除它的 imageID。手动没有委托(delegate)和网络服务它的工作。但是一旦我使用了委托(delegate)函数而不是调用。

问题:

  • 需要使用委托(delegate)或其他方式,以便我可以删除。
  • AppData?.imageList?[indexPath.row].projectUnitImageId必须通过 ImageId 值来删除 Image Web 服务调用,但如何?

  • 请任何人都可以指导我。

    Xib FotoDeleteAlert 和委托(delegate):
    protocol handleDeleteAction {
    func didDeleteButtonClicked(_: UIButton)
    }

    @IBDesignable class FotoDeleteAlert: UIView {

    var delegate: handleDeleteAction?

    @IBOutlet weak var deleteBtn: UIButton!

    override func awakeFromNib() {
    super.awakeFromNib()
    layoutIfNeeded()
    deleteBtn.addTarget(self, action: #selector(didDelete(_:)), for: .touchUpInside)
    }

    @IBAction func didCancel(_ sender: Any) {
    removeFromSuperview()
    }

    @IBAction func didDelete(_ sender: Any) {

    self.delegate?.didDeleteButtonClicked(sender as! UIButton)


    }
    }

    PhotoCollectionViewController:
    let deleteAlertView: FotoDeleteAlert? = nil  // defined on the top

    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellName, for: indexPath) as! PhotoCollectionViewCell


    if(indexPath.row < (AppData?.imageList?.count ?? 0)){
    cell.imageView.isHidden = false
    cell.closeIcon.isHidden = false
    cell.addIcon.isHidden = true
    let dic = AppData?.imageList?[indexPath.row].url ?? " "
    cell.imageView.image = UIImage(url: URL(string: dic))


    let imgId = AppData?.imageList?[indexPath.row].projectUnitImageId
    cell.closeIcon.isUserInteractionEnabled = true
    cell.closeIcon.tag = indexPath.row
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(removeImage(_:)))
    cell.closeIcon.addGestureRecognizer(tapGestureRecognizer)

    } else {
    cell.imageView.isHidden = true
    cell.closeIcon.isHidden = true
    cell.addIcon.isHidden = false
    }

    return cell
    }

    @objc func removeImage(_ sender: AnyObject){

    deleteAlertView?.delegate = self
    let alert = FotoDeleteAlert.loadViewFromNib()
    alert!.frame = self.view.bounds
    self.view.addSubview(alert!)

    }


    //MARK: - Delegate Function

    extension PhotoCollectionViewController: handleDeleteAction {

    func didDeleteButtonClicked(_ sender: UIButton) {
    // below code manual working without delegate and web services work.

    let row = sender.view.tag
    self.data?.remove(at: row.row)
    self.images?.remove(at: row.row)
    self.collectionView.reloadData()

    }
    }


    最佳答案

    用以下替换您的 removeImage 功能

    @objc func removeImage(_ sender: AnyObject){


    let fotoXib = Bundle.main.loadNibNamed("FotoDeleteAlert", owner: self,options: nil)
    let alertView = fotoXib?.first as! FotoDeleteAlert
    alertView.delegate = self
    self.view.addSubview(alertView)

    }

    关于ios - 委托(delegate)函数在删除 CollectionView 项目 Swift 时无法正确调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59465739/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com