[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

Corona SDK 調査6日目

なかなか Corona SDK自体の調査まで進めないCorona SDK調査6日目。 平日はさすがに

記事を読む

iPad, iPhone, Mac, PC で使える Line6 Mobile Keys

今年のCESで発表されて以来ずっと待っていたLine6のMobile Keysがついに発売される。こ

記事を読む

no image

やはり新touchは待ちか…

今年のiPodイベントは、超びっくりは無かったけれどもまずまずみんな満足したのだろうか。 自分はカメ

記事を読む

no image

目からウロコが落ちる英文法書 「ハートで感じる英文法」

ここ数年英語が伸び悩んでいて、一時期は英文法にすがってみようとして3冊ほど英文法書にトライしてみたの

記事を読む

iOS16でaurioTouch の inBufferFramesが1になる

https://developer.apple.com/library/archive/sampl

記事を読む

no image

「伝わる英語」習得術 理系の巨匠に学ぶ が良かったので感想

何気なくKindleで読んだらいろいろ得るところがあったので紹介。 これ一冊をネタにしてかなりいろ

記事を読む

iOS14からおんぷ先生と接続できない

下記の問い合わせがあり、調べたところ、iOS14からおんぷちゃんとおんぷ先生がBluetoothで

記事を読む

Macでコマンドラインで一括オーディオフォーマット変換 afconvert

iOSアプリの場合、効果音のフォーマットは caf がよいらしい。 ダウンロードしたファイルはca

記事を読む

no image

AirMac Extreme Base Station がほしい 2011/05/07

自宅の無線LANルータが不安定なので、AirMac Extremeを買おうかと悩み中。 自宅にApp

記事を読む

iPhotoがiPad mini 4 を iPhone 7 Plus と表示する

「写真」が好きになれないのでいまだにiPhotoを使っているのだが、MacBook Late 201

記事を読む

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 ↑