【iOS扩展开发攻略】Action Extension

上一篇《iOS扩展开发攻略:Share Extension》介绍了分享扩展的开发与使用,本篇主要还是讲述在系统分享菜单中最底下一栏的功能扩展:Action Extension,该扩展跟Share Extension实现比较类似只是在使用场景上进行了区分,Share Extension主要用于将Host应用中的内容分享到Container应用中,而Action Extension则主要用于将Host应用中的内容进行对应处理,原则上来说作用范围比Share Extension要广。

那么,下面将详细讲解开发Action Extension具体的操作步骤:

1. 创建Action Extension扩展Target

1、打开项目设置,在TARGETS侧栏地下点击“+”号来创建一个新的Target,如图:
创建Target

2、然后选择”iOS” -> “Application Extension” -> “Action Extension”,点击“Next”。如图:

选择扩展类型

3、给扩展起个名字,这里填写了“Action”,然后要注意Action Type这里有两个选项:** Presents User Interface No User Interface **。前者是触发扩展后会弹出一个UI界面,后者是不带界面的扩展。这里我会分两部分进行讲解,先从无UI的扩展开始,所以选择了No User Interface,点解Finish完成创建。如图:

填写扩展相关属性

4、这时候会提示创建一个Scheme,点击“Activate”。如图:

创建Scheme

一个无UI的Action Extension Target到此已经创建完成了。下面先来看一下新建的扩展结构,如下图所示:

扩展的文件组织结构

扩展的文件组织结构描述如下:

文件 说明
ActionRequestHandler.h 扩展处理类的头文件,对处理类型的声明描述。
ActionRequestHandler.m 扩展处理类的实现文件,处理扩展实际的业务逻辑。
Action.js 与Web也进行交互的脚本,后续会详细介绍它的作用。
Info.plist 扩展的配置文件

先Command+R编译运行默认的扩展来看一下实际效果。

演示效果图1

演示效果图2

可以看到在弹出的分享菜单的底下一栏多了一个叫Action的小图标(演示图1),并且点击后网页的背景颜色变成红色(演示图2)。下面将对这个例子进行详细的讲解。

2. 分析扩展例子代码

先打开ActionRequestHandler.h头文件,可以看到扩展的处理类ActionRequestHandler的定义,代码如下:

@interface ActionRequestHandler : NSObject <NSExtensionRequestHandling>

@end

上面的类型实现了一个NSExtensionRequestHandling的协议。这也是无UI的扩展对象必须要实现的协议,否则无法向处理类返回正确的回调。我们可以看一下协议的声明:

@protocol NSExtensionRequestHandling <NSObject>

@required

- (void)beginRequestWithExtensionContext:(NSExtensionContext*)context;

@end

协议只有一个方法beginRequestWithExtensionContext:,就是点击扩展图标的时候就会触发这个方法,并将扩展的上下文作为参数进行回调(关于NSExtensionContext相关内容在《iOS扩展开发攻略:Share Extension》有讲述)。所以无UI的扩展相对来说比较简单,只要实现这个方法的处理即可。下面就来看一下例子中的.m文件是怎么处理的。

- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context {
   
    // Do not call super in an Action extension with no user interface
    self.extensionContext = context;
    
    BOOL found = NO;
    
    // Find the item containing the results from the JavaScript preprocessing.
    for (NSExtensionItem *item in self.extensionContext.inputItems) {
   
        for (NSItemProvider *itemProvider in item.attachments) {
   
            if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePropertyList]) {
   
                [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *dictionary, NSError *error) {
   
                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
   
                        [self itemLoadCompletedWithPreprocessingResults:dictionary[NSExtensionJavaScriptPreprocessingResultsKey]];
                    }];
                }];
                found = YES;
            }
            break;
        }
        if (found) {
   
            break;
        }
    }
    
    if (!found) {
   
        // We did not find anything
        [self doneWithResults:nil];
    }
}

从上面代码可知,扩展是通过匹配上下文(NSExtensionContext)的inputItem的附件(attachment)类型是否为PropertyList。然后再通过loadItemForTypeIdentifier方法加载附件后进行相应的处理(关于NSExtensionItem相关内容在《iOS扩展开发攻略:Share Extension》有讲述)。其中处理方法itemLoadCompletedWithPreprocessingResults代码如下:

- (void)itemLoadCompletedWithPreprocessingResults:(NSDictionary *)javaScriptPreprocessingResults {
   
    if ([javaScriptPreprocessingResults[@"currentBackgroundColor"] length] == 0) {
   
        // No specific background color? Request setting the background to red.
        [self d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中,我们可以使用Action Extension扩展应用程序的功能。Action Extension是一种允许用户在其他应用程序中执行特定操作的扩展,例如分享内容、保存信息等。 要创建Action Extension扩展,可以按照以下步骤进行操作: 1. 在Xcode中打开你的应用程序项目。 2. 在左侧导航栏中选择项目的名称,打开项目设置。 3. 在顶部菜单栏中选择"Target"。 4. 点击页面下方的"+"按钮,选择"Action Extension"作为新的目标。 5. 输入Extension的名称,例如"ShareExtension",然后点击"Finish"。 6. Xcode会自动生成一些默认的文件和设置,你可以根据需求进行修改。 7. 打开"Info.plist"文件,配置Action Extension的一些基本信息,例如名称、图标等。 8. 在Action Extension的代码文件中,你可以获取分享的内容,并进行相应的处理。 9. 你还可以在Action Extension中添加自定义的界面,使用户能够更方便地进行操作。 10. 编译并运行你的应用程序,可以选择其他应用程序中的内容,然后在分享菜单中找到你的Action Extension,执行相应的操作。 需要注意的是,为了使Action Extension正常工作,还需要在应用程序设置中配置一些权限和共享数据的支持。你可以在"Capabilities"选项卡中设置对应的权限和所需的共享数据类型。 创建完Action Extension后,你可以将其与应用程序打包在一起分发,用户可以通过在其他应用程序中选择分享菜单来使用你的Action Extension。 总的来说,创建iOS中的Action Extension扩展是一个相对简单的过程,通过使用Action Extension,你可以方便地为你的应用程序提供更多的功能和交互方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值