2012/08/02更新

[XCODE] ペーストボード(クリップボード)に文字や画像を貼付ける方法

このエントリーをはてなブックマークに追加            

こんにちは、絶賛iPhoneアプリ開発中の@yoheiMuneです。
今日は、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は、使いやすく便利ですね。
アプリ独自のデータ型を定義してはりつけも行えます(まぁそこは使いづらそうだが。。)
これから、アプリ間連携を色々とやってみたいと思います(*´∇`*)

最後までお読み頂きましてありがとうございました。





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。