[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 |
関連記事
-
-
自作iPhoneアプリ いろいろレビュー依頼
アプリ制作日誌 #app_24: iPhoneアプリのレビューを、寄稿・依頼できるサイトまとめ。 と
-
-
[iPhone SDK] Log Locations 1.2 を Submit
かなり久しぶりに、自動で毎日移動した場所を記録する Log Locations をアップデートした。
-
-
iPhoneアプリ おんぷちゃんアップデート 2010年6月
ユーザレビューなどで複数の方から要望があった機能に対応してみました。 以下、その説明です。 これま
-
-
iPhoneアプリビジネス本 The Business of iPhone App Development
iPhoneアプリを売るための情報が詰まった本。 ここまでやるか、というくらいの情報が詰まっている。
-
-
英単語学習アプリ EverLearnをリリースしました
2012年年末あたりからこつこつ作り続けてきた英単語学習アプリ EverLearn – タイピング英
-
-
iPad Pro 2017 12.9inch購入
新型コロナウィルスの影響でリモートワークの機会が増えているため、リモートワークをサポートす
-
-
iPhone Core Audio プログラミング (Extended Audio File Services)
発売日からずっと気になる存在だったが、Audio Queue Services を使ったプログラムを
-
-
TableView関連で苦労
iPhoneアプリ開発をやっていると数日に一度何らかの問題にぶつかって、しばらくはまる。本を読んだり
-
-
App Store レビュー中
8月13日にApp StoreにSubmitしたiPhoneアプリがまだIn Review状態だ。果
-
-
iPhone SDK の教科書 読了
先週末にiPhone SDKの教科書 を読了。 サンプルプログラムも手打ちで全て入力して作ってみた。
