如何点击按钮(在UICollectionViewController中)激活共享扩展(UIActivityViewController)?

时间:2018-02-06 05:14:45

标签: swift uicollectionview uicollectionviewcell uiactivityviewcontroller

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 个答案:

答案 0 :(得分:1)

你以这种方式打电话

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

    }
}

答案 1 :(得分:0)

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