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

今作っているアプリに 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詳解リファレンス | |
![]() |
所 友太 京セラコミュニケーションシステム株式会社
リックテレコム 2010-01-12 |
関連記事
-
-
とてもゲームがやりたくなる本: 3Dゲームをおもしろくする技術
ゲームの作り手向けの本だが、こんな工夫がされているのか! と目からウロコが落ち、ゲームがやりたくなる
-
-
最近読んだ本 エンジニアとしての生き方 中島聡
中島聡氏のブログLife is beautifulと、WEB+DB PRESSの記事をまとめた本。
-
-
新しい iPad の感想
昨日2012/03/16(金)は新しいiPadの発売日。 早速買って会社に持ってきた人がいたので、手
-
-
ジョブズ・ウェイ 世界を変えるリーダーシップ を読んでみた 2011/08/27
ジョブズ本は賞賛本も批判本もいろいろ読んでいるつもりだけれども、この本は完全に賞賛本。 元ジョブズの
-
-
最近読んだ本: 良いコードを書く技術
評判良さそうだったので買ってみた。200ページちょっとの薄い本なので、さくっと読み終えることができる
-
-
AutoLayout 問題で Xcode6 が起動しなくなった
iPhone6 Plus の巨大な画面に対応するために、はじめて Interface Builder
-
-
iPhone Developer Program Activation できず
昨日の朝iPhone Developer Program に加入したはずなのだが、夜になってもまだA
-
-
Let’s talk iPhone イベント 2011/10/04
今回のイベントも、楽しみにしながら寝て、早朝に起きてから知ることにした。 今回、事前に行われていた予
-
-
[本] 警備員日記 手塚正巳
警備員日記 posted with カエレバ 手塚 正己 太田出版 20
-
-
Android開発本 まとめ
Android開発に関して調べてみようと思い、本を検索してみたら大量に出てきて、しかも名前が似通って
