[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

Admob SDK が Google AdMob Ads SDK になっていた

かなり以前に作ったアプリをアップデートするにあたって、AdMobで謎のエラーが出ているので最新

記事を読む

no image

iPhoneゲーム開発ワークショップ 翔泳社 PJ Cabrera

以前紹介した、iPhone Games Projects の翻訳本「iPhoneゲーム開発ワークショ

記事を読む

no image

OMNI OUTLINER and GRAFFLE活用ガイド 折中良樹

Macで図を描きたくてドロー系ソフトを探し、OmniGraffle体験版を使い、図を描いたら期限が切

記事を読む

[本] 警備員日記 手塚正巳

警備員日記 posted with カエレバ 手塚 正己 太田出版 20

記事を読む

no image

Xcode4 の初Submit作業ではまる 2011/07/11

昨夜、タッチ! にほんちずHDの次のアプリを検証していて、iPadを回転させるとアプリが異常終了して

記事を読む

no image

[iPhone UI本] Tapworthy (原書) iPhoneアプリ設計の極意 (翻訳)

O'Reilly から本を紹介するメールが来て、その中で目がとまって結局iPhoneアプリとして購入

記事を読む

[iPhone 6 Plus] TUNEWEAR の iPhone 6 Plus 用ケースを買ってみた

iPhone 6 Plus 購入時に、とりあえず購入した Simplism のケースは、すぐ

記事を読む

no image

iPhoneアプリケーションプログラミング

知らないうちにまたiPhoneアプリ開発本が出ていた。 目次はこちら。 プラットフォームとして

記事を読む

Apple Developer Program 更新 2017

今年も Developer Program を更新。今年は11800円+税だった。そして証明書も更新

記事を読む

no image

The Presentation Secrets of Steve Jobs ジョブスプレゼン本

自作アプリのテスト中に、たまたまAmazon.comで発見した本をAmazonで注文して当日に届く。

記事を読む

Message

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Bluetooth MIDIキーボード KORG microKEY Airを買ってみた

以前から気になっていた、Bluetooth MIDI キーボード K

Ergohuman のオフィスチェアが気に入っている

コロナウィルスの影響で自宅勤務が数週間続いている。自分は自宅で開発環

AWS IoTを利用してクラウド連携機能を追加してみた

GWに自宅待機でまとまった時間が確保できたので、AWS Io

おんぷちゃん for iPad にオンライン授業サポート機能を追加

コロナウィルスの影響で、うちの子どもたちのピアノレッ

Mac Fan 2020年 6月号

長女のiPhone 6 の画面がバキバキに割れているので、i

→もっと見る

PAGE TOP ↑