代码之家  ›  专栏  ›  技术社区  ›  Vincent

当点击按钮(位于UICollectionViewController中)时,如何激活共享扩展(UIActivityViewController)?

  •  1
  • Vincent  · 技术社区  · 8 年前

    enter image description here

    我正在尝试向其中一个UICollectionViewCell添加一些按钮或标签,但当点击共享按钮时,似乎无法激活UIActivityViewController。

    以下是我的代码:

    class VerticalCollectionViewCell: UICollectionViewCell {
    
    
    
    
     override init(frame: CGRect) {
    
        super.init(frame: frame)
    
    
        containerView.addSubview(shareButton)
        shareButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -16).isActive = true
        shareButton.rightAnchor.constraint(equalTo: favoriteButton.leftAnchor, constant: -16).isActive = true
        shareButton.widthAnchor.constraint(equalToConstant: 24).isActive = true
        shareButton.heightAnchor.constraint(equalToConstant: 24).isActive = true
        shareButton.addTarget(self, action: #selector(handleShareButton), for: .touchUpInside)
    
    }
    
      @objc func handleShareButton(sender: UIButton) {
            let shareText = NSLocalizedString("I found something interesting you may want to take a look at.", comment: "share")
            let shareImage = #imageLiteral(resourceName: "Bear")
            let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [shareText, shareImage as Any], applicationActivities: nil)
            activityViewController.popoverPresentationController?.sourceView = self.view
            self.present(activityViewController, animated: true, completion: nil)
        }
    
    
    
    }
    

    错误包括: Value of type 'VerticalCollectionViewCell' has no member 'view' Value of type 'VerticalCollectionViewCell' has no member 'present' .

    我知道presentViewController是一个UIViewController方法,UITableViewCell没有名为presentViewController的方法,UITableViewCell不应该处理任何业务逻辑。它应该在视图控制器中实现。

    但我不知道如何解决这个问题。

    2 回复  |  直到 8 年前
        1
  •  1
  •   SuryaKantSharma    8 年前

    你这样叫do

    class Cell: UITableViewCell {
        @IBOutlet let shareButton: UIButton!
    }
    class VC: UIViewController, UITableViewDataSource {
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? Cell {
                cell?.shareButton.addTarget(self, action: #selector(VC.shareButtonPressed(_:)), for: .touchUpInside)
            }
        }
        func shareButtonPressed(_ button: UIButton) {
            //code here
    
        }
    }
    
        2
  •  0
  •   Rakshith Nandish    8 年前

    您可以做的是定义单元格的协议,tableview可以遵守该协议。点击collectionView上的share按钮时,调用此委托方法,传入相关信息,如该collectionView单元格的单元格标记或模型。使用这些信息,您可以从viewController中显示ActivityController。