[XCODE] ペーストボード(クリップボード)に文字や画像を貼付ける方法
こんにちは、絶賛iPhoneアプリ開発中の@yoheiMuneです。
今日は、iOSに用意されているペーストボード(PCとかだとクリップボードという名前の機能)を使う方法を学んだので、 ブログに書きたいと思います。
例えば、あるアプリでURLをペーストボードに貼付けて、SafariでURL入力欄に貼付けるとか。
例えば、画像をペーストボードに貼付けて、メールアプリの本文に貼付けるとか。
そんな感じで、データのやり取りをアプリ感で行う事の出来る少ない方法の一つです。
扱えるデータは、「strings, images, URLs, colors」であれば簡単に処理を行えますし、それ以外のデータ 型もNSDataという形でペーストボードで保持する事が可能です。
ここで第2引数に設定している文字列は何だ!?って感じになりますが、 これは、Macで定義されている「Uniform Type Identifier」というモノで、データの型を指定しています。
上記のようにMacで定義されているモノを使う事も出来れば、自分で定義する事も可能です。
詳細は、以下を参照ください。
Uniform Type Identifier @wikipedia
About UTI
また、Uniform Type Identifierを指定するのが面倒だという場合には、以下のように設定する事も可能です。
でもこれでやると他のものが全部消えてしまうようです。
UIPasteboard Class Reference
アプリ独自のデータ型を定義してはりつけも行えます(まぁそこは使いづらそうだが。。)
これから、アプリ間連携を色々とやってみたいと思います(*´∇`*)
最後までお読み頂きましてありがとうございました。
今日は、iOSに用意されているペーストボード(PCとかだとクリップボードという名前の機能)を使う方法を学んだので、 ブログに書きたいと思います。
ペーストボードとは
ペーストボードとは、UIPasteboardクラスを用いて、データをアプリ間でやり取りする仕組みです。例えば、あるアプリでURLをペーストボードに貼付けて、SafariでURL入力欄に貼付けるとか。
例えば、画像をペーストボードに貼付けて、メールアプリの本文に貼付けるとか。
そんな感じで、データのやり取りをアプリ感で行う事の出来る少ない方法の一つです。
扱えるデータは、「strings, images, URLs, colors」であれば簡単に処理を行えますし、それ以外のデータ 型もNSDataという形でペーストボードで保持する事が可能です。
ペーストボードへのはりつけ方法
Pasteboardへデータを貼付けるには、基本的には以下のメソッドを使います。- (void)setValue:(id)value forPasteboardType:(NSString *)pasteboardType例えば、文字列、画像、URLの場合には、以下のように使います。
// UIPasteboardのインスタンスを生成する。 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; // 文字列を貼付ける。 [pasteboard setValue:@"aaaa" forPasteboardType:@"public.text"]; // 画像を貼付ける。 [pasteboard setValue:[UIImageimageNamed:@"1.jpg"] forPasteboardType:@"public.image"]; // URLを貼付ける。 [pasteboard setValue:[NSURLURLWithString:@"http://www.yoheim.net/"] forPasteboardType:@"public.url"];
ここで第2引数に設定している文字列は何だ!?って感じになりますが、 これは、Macで定義されている「Uniform Type Identifier」というモノで、データの型を指定しています。
上記のようにMacで定義されているモノを使う事も出来れば、自分で定義する事も可能です。
詳細は、以下を参照ください。
Uniform Type Identifier @wikipedia
About UTI
また、Uniform Type Identifierを指定するのが面倒だという場合には、以下のように設定する事も可能です。
// 文字列を貼付ける。 pasteboard.string = setValue:@"aaaa" forPasteboardType:@"public.text"; // 画像を貼付ける。 pasteboard.image = setValue:[UIImageimageNamed:@"1.jpg"] forPasteboardType:@"public.image"; // URLを貼付ける。 pasteboard.URL = setValue:[NSURLURLWithString:@"http://www.yoheim.net/"] forPasteboardType:@"public.url";こっちの方が簡単かも。。
でもこれでやると他のものが全部消えてしまうようです。
ペーストボードから値を取り出す
取り出すのは、設定と反対な感じで出来ます。// 文字列を取り出す。 NSString *string = [pasteboard valueForPasteboardType:@"public.text"]; // 画像を取り出す。 UIImage *image = [pasteboard valueForPasteboardType:@"public.image"]; // URLを取り出す。 NSURL *url = [pasteboard valueForPasteboardType:@"public.url"];または、簡単に以下のように出来ます。
// 文字列を取り出す。 NSString *string = pasteboard.string; // 画像を取り出す。 UIImage *image = pasteboard.image; // URLを取り出す。 NSURL *url = pasteboard.url;
参考資料
以下のリファレンスを参照しました。ありがとうございました。UIPasteboard Class Reference
最後に
iPhoneアプリは、アプリ間でのデータ共有ってなかなかしづらいですが、Pasteboardは、使いやすく便利ですね。アプリ独自のデータ型を定義してはりつけも行えます(まぁそこは使いづらそうだが。。)
これから、アプリ間連携を色々とやってみたいと思います(*´∇`*)
最後までお読み頂きましてありがとうございました。