总有人间一两风,填我十万八千梦

iOS Action Extension 教程

转载 Zero、J 1261℃ 0评论

这几天在研究iOS里面的Extension。中文资源好像不太多,所以我把一些最近看到的心得陆续写一下。

今天我要做的简单教学,是让APP可以打开Action Sheet,里面会有一个Read按钮,当使用者点了Read,APP就会帮你念出APP中的文字内容。

其实Extension最常被使用的地方是:虽然你没有开启APP,但你可以让使用者可以使用某些APP功能或内容,所以通常使用Extension的时候都是因为有些特殊工作需要执行。Extension的种类很多,今天我要介绍的是Action Extension,这个Extension主要的目的是让使用者查看或操作你APP里的内容。在实作Extension特别需要注意的一个观念是:Extension并不是一个APP唷!

好了,我们开始吧!

Step 1.

打开Xcode新增一个Project,使用Single View Application并取一个自己喜欢的Project名字,我这里取的是:“ReadExtPractice”

Step 2.

从Target的地方新增一个Target,并选择Action Extension,一样自己取一个你喜欢的名字吧!这里我是叫做”Read”。然后在Activate处先选Cancel吧。

Step 3.

现在就开始来动工做一下简单的UI吧!这里我们以iPhone作为例子,就暂且不考虑那些iphone尺寸不同问题拉。先到ReadActionExt里面Main.storyboard里点选View Controller,并把Simulated Metrics里面的size设定成iPhone 4.7-inch,就假设他是iPhone6吧。然后加入一个TextView与一个Button,并且把TextView的内文设定为自己想要的内容,如果不知道写什么,就跟我写一样吧!我的是“Hello, my name is Tung-tung Tsai. Welcome to Use Action Extension. Have a nice day.”并将按钮的Title换成”Action”。如果不知道元件的size如何设定比较好,可以参考我这里是设定textview{0, 28, 375, 200},button{112, 250, 150, 40}。

Step 4.

接下来开始写点code拉。先到ViewController.h里加入textView这个property并命名为”textView”并加入按钮的Action命名为”ActionPressed”,然后到ViewController.m里面找到- ( IBAction )ActionPressed:( id )sender 这个函数,并在里面加上这段code,让使用者点击按钮后出现一个Activity Controller。

- ( IBAction )ActionPressed:( id )sender {
UIActivityViewController *activityVC = [[ UIActivityViewController alloc ] initWithActivityItems : @[self . textView . text ] applicationActivities : nil ];
[ self presentViewController :activityVC animated : YES completion : nil ];
}

Step 5.

都没问题后就要开始来处理Action Extension的部分拉!一样先处理UI,我们到Read里面打开MainInterface.storyboard,这里原本会有一个imageView不过我们不需要他,就直接将他Delete吧,然后加上一个TextView,并将Navigation Bar的标题改成”Read Ext “。

然后进入ActionViewController.h里加入一个property命名为”TextView”连结到刚刚你加到storyboard里的TextView吧!

Step 6.

打开ActionViewController.m,先在上面@import AVFoundation后,将– ( void)viewDidLoad 的code先拿掉并重新写上:
NSExtensionItem *item = self . extensionContext . inputItems [ 0 ];
NSItemProvider *itemProvider = item. attachments [ 0 ];

if ([itemProvider hasItemConformingToTypeIdentifier :( NSString *) kUTTypePlainText ]) {

[itemProvider loadItemForTypeIdentifier :( NSString *) kUTTypePlainText options : nil completionHandler :^( NSString * item, NSError * error) {
if (item) {
[[ NSOperationQueue mainQueue ] addOperationWithBlock :^{
[ self . TextView setText :item];

//Set Synthesizer and utterence
AVSpeechSynthesizer *synthesizer = [[ AVSpeechSynthesizer alloc ] init ];
AVSpeechUtterance *utterance = [ AVSpeechUtterance speechUtteranceWithString : self . TextView . text ];
[utterance setRate : 0.5 ];
[synthesizer speakUtterance :utterance];
}];
}
}];

}

Step 7.

完成上述程式码就代表他会在Extension被呼叫时读取原本在TextView里面的文字并且朗读出来。但还没结束,还需要在Read里面的Info.plist设定一些参数才行。先进入Info.plist,然后打开NSExtension -> NSExtensionAttributes -> NSExtensionActivationRule,将NSExtensionActivationRule的type改为Dictionary,并加入一个新的项目NSExtensionActivationSupportsText,把这个type设为Boolean,并把Value设为YES。

Step 8.

终于完成了,最后到Asset.xcassets里面把120×120的图示放进去,并在App icon source里面设定Icon来源为AppIcon就完成了。

Step 9.

实际执行看看吧!!应该会出现下面的样子,如果我点选Action,再点选Read就会出现一个新页面然后开始读文字内容给你听喽!!!!

完成了!希望这个教学可以帮助你更认识Action Extension喽!如果有需要这份代码,可以从Github上面查看。

转载自: https://tsaitungtung.blogspot.com/2015/11/ios-action-extension.html

 

转载请注明:悠然品鉴 » iOS Action Extension 教程

喜欢 (0)or分享 (0)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址