如何通过 UIActivityViewController 打印 UIWebView?

Posted

技术标签:

【中文标题】如何通过 UIActivityViewController 打印 UIWebView?【英文标题】:How to print a UIWebView via UIActivityViewController? 【发布时间】:2017-12-05 18:27:49 【问题描述】:

我有一个包含UIWebView 的视图控制器和一个带有操作/共享按钮的工具栏。这将初始化并呈现一个UIActivityViewController 对象。根据我是否为activityItems 参数提供了Web 视图的URL 或URL 的相应absoluteString,提供了不同的操作,但从未显示打印 选项(在“更多”部分)。

我确实知道如何使用UIPrintInfoUIPrintInteractionController 显式打印Web 视图内容,但这将是一个单独的工具栏按钮,而我只想将系统的打印选项包含在活动按钮行中。我假设打印 Web 视图不需要任何显式编码。

我能做什么?

【问题讨论】:

【参考方案1】:

您可以像这样为 UIActivityCotnroller 创建自定义活动,

 import UIKit

protocol CustomActivityDelegate : NSObjectProtocol

    func performActionCompletion(actvity: CustomActivity)



class CustomActivity: UIActivity 

    var delegate: CustomActivityDelegate?


    override class var activityCategory: UIActivityCategory 
        return .action
    

    override var activityType: UIActivityType? 
        guard let bundleId = Bundle.main.bundleIdentifier else return nil
        return UIActivityType(rawValue: bundleId + "\(self.classForCoder)")
    

    override var activityTitle: String? 
        return "You title"
    

    override var activityImage: UIImage? 
        return <Your activity image >
    

    override func canPerform(withActivityItems activityItems: [Any]) -> Bool 
        return true
    

    override func prepare(withActivityItems activityItems: [Any]) 
        //
    

    override func perform() 
        self.delegate?.performActionCompletion(actvity: self)
        activityDidFinish(true)
    

你可以像这样初始化这个活动

let customActivity = CustomActivity()
customActivity.delegate = self

您可以在准备 UIActivityController 时添加此自定义活动

let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [customActivity], applicationActivities: nil)

你还需要实现回调方法

func performActionCompletion(actvity: CustomActivity)

   //Perform you task

注意:这只是伪代码,可能包含错误或语法问题

【讨论】:

谢谢你的线索。这非常复杂,我认为在 ios 中打印 URL /UIWebView 的内容会更直接。不过,我想我会以这种方式实现它。 @stefan 如果您的问题得到解决,请接受我的回答 如果没有其他想法以更短的方式执行此操作,我会很乐意这样做——我希望有一个无需显式编码的解决方案。再次感谢您的帮助!

以上是关于如何通过 UIActivityViewController 打印 UIWebView?的主要内容,如果未能解决你的问题,请参考以下文章

我在作为 UIDocumentInteractionController 和 UIActivityViewController 的一部分的 UIActivityGroupViewController

创建类似于新的 iOS 6 按钮共享的自定义共享视图

如何通过IP获取MAC地址?如何通过mac来获取IP地址?

如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?

如何通过android上的ADB命令通过pc拨打电话?

如何通过 DBLINK 通过 DBLINK 调用 SELECT?