[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

関連記事

おんぷちゃん for iPad 2.0.0リリース

あけましておめでとうございます。今年もよろしくお願いします。 2022年8月にはだいたい完成

記事を読む

LogLocations 1.3.3 Release

恒例の、年末年始時間があるときの LogLocations のアップデート。久し

記事を読む

no image

iPhoneアプリケーションプログラミング 新居雅行 購入

今年6月末にでたときには、「またiPhoneプログラミング本が出たんだなー」「表紙が地味だなー」「特

記事を読む

おんぷちゃん for iPad リアル鍵盤で回答

おんぷちゃん for iPad は五線譜上に表示される音符をスクリーン上のキーボードや、USBやB

記事を読む

no image

Mac OS X Cocoaプログラミング(ヒレガス本)

Cocoaプログラミング界では有名だと思われるヒレガス本を購入。まずは目次。 使っているツール達のバ

記事を読む

no image

自作iPhoneアプリ いろいろレビュー依頼

アプリ制作日誌 #app_24: iPhoneアプリのレビューを、寄稿・依頼できるサイトまとめ。 と

記事を読む

no image

さらに薄いiPhoneケース SwitchEasy Nude Ultra Clear

以前 eggshell for iPhone クリアを購入したが、Homeボタンを押す際などに力が入

記事を読む

[iOS SDK] Miselu C.24 対応(Bluetooth MIDI対応)

自作アプリの Miselu C.24 対応(というかBluetooth MIDI対応)を行ったので、

記事を読む

no image

Corona SDK 新バージョンリリース

Corona SDKの新バージョンが出た。 Corona SDK: New additions an

記事を読む

US Unlocked にてiPad 購入、無事入手

日本の発売まで待つか結構悩んだけれども、なるべく早く自作アプリの動作確認をしておきたいということもあ

記事を読む

Message

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

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

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

Vision Pro カバーケースを買ってみた

[itemlink post_id="11629"]

→もっと見る

PAGE TOP ↑