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

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

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

我能做什么?

【问题讨论】:

    标签: ios swift uiwebview uiactivityviewcontroller airprint


    【解决方案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 如果您的问题得到解决,请接受我的回答
    • 如果没有其他想法以更短的方式执行此操作,我会很乐意这样做——我希望有一个无需显式编码的解决方案。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多