[iPhone SDK] UILabel からポップアップメニューを表示してみる

公開日: : 最終更新日:2010/11/30 iPad, iPhone, , ,

copy01.png

今作っているアプリに UILabel を複数置いた画面があるが、その UILabelたちは編集はできなくてよいが、コピーは可能にしたい。
ということで、検索してみたら Stack Overflow で見つかった
いつもながら、Stack Overflowは見つからない質問はないのではないかと思えるくらい質問と回答が充実している。

で、この通りにUILabelを継承したCopyableLabelを作ればよいのだけれども、この通りにやるとUILabelのサイズの中央にUIMenuControllerのメニューが表示されてしまうので、Interface BuilderでUILabelのサイズを余裕を持って配置している場合には違和感のある表示になってしまう。
ということで、UILabel中の文字列のサイズを取ってきてそのサイズの中央に表示するように変えてみた。
あとは、コピーした際にコピーした範囲が分かるようになにかアニメーションがあった方がよいだろう、ということでalphaの値を0から1.0までアニメーションさせてみた。
ということで一応変更部分を抜き出してみる。


- (void)copy:(id)sender {
	UIPasteboard *board = [UIPasteboard generalPasteboard];
	[board setString:self.text];
	self.highlighted = NO;
	
	// animation
	[self setAlpha:0.0f];
	CGContextRef context = UIGraphicsGetCurrentContext();
	[UIView beginAnimations:nil context:context];
	[UIView setAnimationDuration:0.8];
	[self setAlpha:1.0f];	
	[UIView commitAnimations];	
	
	[self resignFirstResponder];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
	if([self isFirstResponder]) {
		self.highlighted = NO;
		UIMenuController *menu = [UIMenuController sharedMenuController];
		[menu setMenuVisible:NO animated:YES];
		[menu update];
		[self resignFirstResponder];
	}
	else if([self becomeFirstResponder]) {
		UIMenuController *menu = [UIMenuController sharedMenuController];
		// use text size for UIMenuController
		CGSize textSize = [[self text] sizeWithFont:[self font]];
		CGRect rect = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, textSize.width, textSize.height);
		[menu setTargetRect:rect inView:self];
		[menu setMenuVisible:YES animated:YES];
	}
}

UIMenuControllerや、UIPasteBoard の話は所さんの本にわかりやすく載っていた。参考まで。

また、ポップアップメニューをカスタマイズして独自のメニューを表示したい人は、こちらを参照すると良い。
こちらも Stack Overflow の情報。

iPhoneプログラミングUIKit詳解リファレンス
iPhoneプログラミングUIKit詳解リファレンス 所 友太 京セラコミュニケーションシステム株式会社

リックテレコム 2010-01-12
売り上げランキング : 5673

Amazonで詳しく見る by G-Tools

関連記事

no image

[iOS SDK] Pebble腕時計対応iOSアプリを作る

英単語学習アプリ WordLearnをリリースしましたに書いたけれども今Pebble腕時計対応iOS

記事を読む

no image

[iPhone SDK] View Based Application で NIB(XIB)ファイルを削除してみる

iPhoneアプリ開発に慣れてくると、段々Interface Builderを使わなくなってくる。

記事を読む

no image

[iOS] アプリ名を変更したところなぜかビルドが通らなくなり苦労した話

アプリ名にiPadと入れるとRejectされる に書いたとおり、アプリ名に iPad が入っていた

記事を読む

ParentalGate修正

いくつか数年前に作ってアップデートしていなかったアプリたちに関して、更新しないとApp Storeか

記事を読む

英単語学習アプリ EverLearn Ver.1.2.5 が公開されました

2016/03/05 Updateこの記事は公開時(2013年10月)から時間が経って古い内容になっ

記事を読む

no image

View-Based ApplicationにUINavigationControllerを追加する方法

(いろいろ間違っていたので 2009/05/13 更新) (さらに 2009/08/08 更新) こ

記事を読む

LogLocation 1.3.1 で和暦問題に対応しました

4年ぶりに位置情報ログ取りアプリ LogLocations をアップデートしたところ、レビューにて不

記事を読む

no image

[iPhone開発本] オライリー iPhoneアプリケーション開発ガイド 感想その1

面白そうだったので発売日に買ってみた。1995円と安いのもすばらしい。 しかしタイトルは一ひねりした

記事を読む

no image

Kickstarter で iPhone/Android で使える腕時計 Pebble に出資してみた

Kickstarter で28時間で100万ドルを調達したという Pebble E-Pape

記事を読む

no image

おんぷちゃん for iPad 1.3.3 Submit

今回は紅白歌合戦を見ながらSubmit。 相変わらずうちの娘が譜読みに苦労していて新しい曲を弾く

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

Vision Proアプリ開発本 8/24、8/26に発売

Vision Proアプリ開発入門 P400が 8/24 に発売、V

Developer Strap が日本でも購入可能に

USアカウントでしか購入できなかった Vision Pro 用 De

→もっと見る

PAGE TOP ↑