其實Extension最常被使用的地方是:雖然你沒有開啟APP,但你可以讓使用者可以使用某些APP功能或內容,所以通常使用Extension的時候都是因為有些特殊工作需要執行。Extension的種類很多,今天我要介紹的是Action Extension,這個Extension主要的目的是讓使用者查看或操作你APP裡的內容。在實作Extension特別需要注意的一個觀念是:Extension並不是一個APP唷!
好了,我們開始吧!
Step 1. 打開Xcode 新增一個Project,使用Single View Application並取一個自己喜歡的Project名字,我這裡取的是:“ReadExtPractice”
好了,我們開始吧!
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裡面把120x120的圖示放進去,並在App icon source裡面設定Icon來源為AppIcon就完成了。
Step 9. 實際執行看看吧!!應該會出現下面的樣子,如果我點選Action,再點選Read就會出現一個新頁面然後開始讀文字內容給你聽嘍!!!!
完成了! 希望這個教學可以幫助你更認識Action Extension嘍!如果有需要這份代碼,可以從Github上面查看。
沒有留言:
張貼留言