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

Posted

技术标签:

【中文标题】当点击按钮(在 UICollectionViewController 中)时如何激活共享扩展(UIActivityViewController)?【英文标题】:How to activate share extension (UIActivityViewController) when a button tapped (which is in UICollectionViewController)? 【发布时间】:2018-02-06 05:14:44 【问题描述】:

我正在尝试向 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 不应该处理任何业务逻辑。它应该在视图控制器中实现。

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

【问题讨论】:

【参考方案1】:

你这样调用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】:

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

【讨论】:

谢谢,Rakshith。你的意思是这样的:***.com/questions/40111778/… ?

以上是关于当点击按钮(在 UICollectionViewController 中)时如何激活共享扩展(UIActivityViewController)?的主要内容,如果未能解决你的问题,请参考以下文章

当点击一个按钮在android中顺时针旋转图像

为啥当点击区域落在按钮上时 UIGestureRecognizerDelegate 的 shouldRecognizeSimultaneouslyWith 没有被执行?

js中点击按钮时自动增加一行

js中点击按钮时自动增加一行

Javascript - 当用户点击退出按钮时,确认框重定向用户

当用户在 UIActivityViewController 上点击“更多”时如何设置导航栏按钮?