[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

iPhone SDKプログラミング大全

大全というのは大げさで入門という感じの本だけれども一通りどんなことができるのかを知るという点では使え

記事を読む

かいけつゾロリ 作品名一覧

うちの娘がかいけつゾロリにはまっているためせっせと図書館で予約して借りてますが、人気があるため貸し出

記事を読む

no image

ゲームで起業した人たちのインタビュー集 Gamers at Work

Gamers at Work: Stories Behind the Games Peo

記事を読む

no image

iPhone SDK アプリケーション開発ガイド

iPhone SDK アプリケーション開発ガイド(原題 iPhone SDK Application

記事を読む

no image

iPhone SDKでユーザデータをローカルに保存したい

一応5日より次のiPhoneアプリの開発を始めた。 前回のアプリはアプリの設定をちょこっとローカルに

記事を読む

no image

月刊ビジネスアスキー11月号の特集はアップルの謎

月刊ビジネスアスキーは先月定期購読をやめたのだが、今月は「アップルの謎」と称した特集だったので買って

記事を読む

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

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

記事を読む

Roland 電子ドラム TD-4KP 落札

(2016年2月の記事)ドラム譜学習アプリを作るためには自分も叩けないと困るだろう、ということでMI

記事を読む

no image

そのまま使えるiPhoneゲームプログラム

書店で見かけて立ち読みしてみた。 ゲームで使いそうな小技が紹介されている。ゲーム向けなので、Open

記事を読む

no image

WEB+DB PRESS 総集編〔Vol.1~72〕購入

71号のHeroku特集を買いにいったらすでに売っていなかったが1から72号までの総集編があったので

記事を読む

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 ↑