2

我打算在我的应用程序中使用 ShareKit。我也想要打印(AirPrint)。我想在同一个操作表中拥有所有选项(Facebook 和 Twitter 和打印机)。有什么理由我不应该这样做吗?我一直在寻找一些关于如何实现这一目标的提示,但一直空白。有一些提示可以从 ActionSheet 中删除内容但不添加它们。打印机选项不会被视为“共享”吗?

4

1 回答 1

3

向 ShareKit 添加动作的过程在“如何向 ShareKit 添加新动作”中进行了介绍。此描述假设您已经实现了核心 Sharekit 功能(例如,您已经实现了 ShareKit 示例程序)。

您将从 ShareKit Template Src 文件夹(.m 和 .h 文件)复制 New Action 模板到您的项目中,用适当的名称重命名文件(如“SHKPrint.m/.h”)。有一些明显的东西需要改变,比如类名和头文件导入文件。添加#import "SHKSharer.h"到头文件。

SHKSharers.plist如链接页面所述,将类添加到 中的操作/服务列表。(在这一点上,我可以看到的动作和服务之间确实没有区别,据我所知,它们也可以组合在一起,没有问题。但是,一个区别是,动作被假定为不需要身份验证。requiresAuthentication是模板中的方法。)

之后,如文档所述,熟悉了解共享流程

至少其中一个canShare方法需要被覆盖,并且它们已经在模板中设置,供您修改和取消注释。我想象一下,出于您的目的,您可能希望将 canShareText 视为一种适当的共享方法,因此将其更改为返回 YES。然后,您将能够使用分配给 UISimpleTextPrintFormatter 或 UIMarkupTextPrintFormatter 的 printFormatter 进行打印(但必须设置 UIPrintInteractionController)。(我认为您没有提到要打印的内容,因此您必须即兴发挥。)

修改sharerTitle新共享者类中的方法,以显示适当的标题。

此时,您应该能够运行代码并查看操作表。您的打印操作不会显示在这一页上,但如果您单击更多... 按钮,它应该会显示在第二张纸上。

单击该操作,除了工作表将隐藏之外,什么都不会发生。现在您需要添加一些代码来进行打印。(稍后您会看到,如果您再次选择分享,新操作已添加到第一个操作表,这是最近使用的列表。)

我提到假设您已经实现了核心 ShareKit 功能,例如 ShareKit 示例程序。如果您转到调用 sharekit 操作表的方法(在您自己的代码中,例如响应您按下共享按钮),您将看到一个位置来确定您想要共享的信息类型 -​​ 例如,URL,图像,文本,...这与您要将共享信息发送到的位置无关——打印机、facebook、twitter、...(我认为这是本末倒置,我已经修改了自己的实现来修复这个。)但是,暂时忽略这一点,你会想要这样设置它:

- (void) shareButtonPressed {

    SHKItem *item = [SHKItem text:yourSimpleTextOrMarkupText];

    // Get the ShareKit action sheet
    SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item];


    // Display the action sheet
    [actionSheet showInView:self.view];

}

这使轮子开始运动以共享项目对象中的任何内容。item 对象包含一个 shareType,在本例中为 SHKShareTypeText,它是一个枚举类型。

我不会进入将其转化为共享结果的机制。我在睡梦中还不知道,可能会误导你(如果我还没有的话)。

当您单击操作表中的项目时,SHKActionSheet 类会发挥一些作用,将新操作类(在本例中为 SHKPrint)的字符串名称转换为一个类,并使用它来调用一个类方法来分配和初始化一个同一个类的实例。(我在打字时这样做,所以我跳过了从“更多...”第二张表中如何完成的步骤。我将把它留给读者来追踪它,看看它是如何工作的。)

共享是通过调用链完成的,该调用链贯穿SHKSharer 类中的share, thenshow方法。(有一些关于自动共享的业务,我不会在这里讨论,但我认为您可以暂时忽略它。)这最终落在了send您的自定义类(SHKPrint)的方法上。查看您的模板文件,它将为您提供一些指导。

有关打印的更多信息,请参阅此链接,这似乎是一个很好的示例,说明您可以执行哪些打印操作。

我会在这里停下来有几个原因。我想我回答了你的问题,如何添加操作表。此外,我没有 AirPrint 功能可以在这里进行测试,所以我不能靠自己走得更远。

如果您还有其他问题,请告诉我。

于 2011-11-30T06:15:31.943 回答