koogawa log

iOS、Android、foursquareに関する話題

【Tips】iOSのペーストボード(クリップボード)を操作する

UIPasteboard を使って、文字列や画像などをコピー&ペーストする方法です。

実装方法

まずはインスタンスを生成します。

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

コピー

文字列をペーストボードにコピーします。

[pasteboard setValue:@"文字列" forPasteboardType:@"public.text"];

画像もコピーできます。

UIImage *image = [UIImage imageNamed:@"hoge.jpg"]
[pasteboard setValue:image forPasteboardType:@"public.image"];

PasteboardType には Uniform Type Identifier を指定しています。

ペーストボードから値を取り出す

ペーストボードにコピーされた文字列や画像を取り出します。

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

// 文字列を取り出す。
NSString *string = [pasteboard valueForPasteboardType:@"public.text"];

// 画像を取り出す。
UIImage *image = [pasteboard valueForPasteboardType:@"public.image"];

ペーストボードの共有範囲

インスタンスを生成する際、

+ (UIPasteboard *)generalPasteboard;

メソッドを使用すると、全アプリ共通のペーストボードにアクセスできるようになります。他のアプリ間でデータを共有したい場合などはこちらを使います。

ペーストボードに名前を付け、その名前を知っているアプリからのみアクセスできるようにすることもできます。

+ (UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;

createYES にすると、その名前のペーストボードが存在しない場合、新たに生成します。 IDやパスワードなど、他のアプリから参照されたくないデータを扱うときはこちらを使うとよいでしょう。

ペーストボードを監視する

UIPasteboardChangedNotification を監視することで、ペーストボードの内容が更新された際に通知を受け取ることができます。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(pasteboardChanged:)
                                             name:UIPasteboardChangedNotification
                                           object:nil];

ペーストボードの内容が上書きされる際は、「消去」と「書き込み」のタイミングで計2回呼ばれるようです。

注意点

アプリがバックグラウンド状態になると、ペーストボードの監視はできなくなります。

※バックグラウンドでも監視を続ける方法があるようです:iphone - Grabbing the UIPasteboard like Pastebot while running in the background - Stack Overflow

参考リンク