如何通过 UIActivityViewController 打印 UIWebView?

How to print a UIWebView via UIActivityViewController?

我有一个包含 UIWebView 的视图控制器和一个带有 action/share 按钮的工具栏。这将初始化并呈现一个 UIActivityViewController 对象。根据我是否为 activityItems 参数提供 Web 视图的 URL 或 URL 的相应 absoluteString,会提供不同的操作,但 Print 选项从未显示("more" 部分也未提供)。

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

我能做什么?

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

 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)
    }
}

你可以初始化这个activity像这样的东西

let customActivity = CustomActivity()
customActivity.delegate = self

并且您可以在准备 UIActivityController

时添加此自定义 activity
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [customActivity], applicationActivities: nil)

你还需要实现回调方法

func performActionCompletion(actvity: CustomActivity)
{
   //Perform you task
}

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