iPhone開発のネタ帳: UIPopoverController に UIPickerView をいれる
iPad から追加された部品の一つに、UIPopoverController がある。
iPadが出るまではNDAのためブログにも書けなかったが、今はApple公式ページにReferenceが公開されている。
自作アプリでは、iPhone版では設定画面のためにNavigationControllerを使って全画面で設定を行っているが、iPadからは基本的に全画面の遷移はなくなり、必要に応じてPopupを使うことになっている。(iPad HIG: Human Interface Guideline 参照)
このため、iPhone版で用意している設定画面を UIPopoverControllerで用意することとした。
UIPopoverController は中にどんなUIViewControllerでもいれることができるらしい。
– (id)initWithContentViewController:(UIViewController *)viewController
でPopoverを作成する。
実際のコードは下記のようなもの。NavigationController には UITableView をいれている。
-(IBAction)settingsButtonPressed:(id)sender { if (!mPopoverController) { NSString *settings = NSLocalizedString(@"Settings", @"Settings"); SettingViewController *settingVC = [[SettingViewController alloc]initWithStyle:UITableViewStyleGrouped]; UINavigationController* theNavController = [[UINavigationController alloc] initWithRootViewController:settingVC]; theNavController.navigationBar.topItem.title = settings; [theNavController setNavigationBarHidden:NO]; [theNavController setToolbarHidden:NO]; mPopoverController = [[UIPopoverController alloc]initWithContentViewController:theNavController]; mPopoverController.delegate = self; [settingVC release]; [theNavController release]; } if(!mPopoverController.popoverVisible) { // visible でない場合 [mPopoverController presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } }
設定画面の中で、数値を選ぶ必要があったので、SettingViewControllerから、UIPickerViewを呼び出すようにした。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSUInteger section = [indexPath section]; switch (section) { case 0: { [self.navigationController pushViewController:mMondaisuPickerVC animated:YES]; break; } default: break; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
分からないこと:
UIPopoverController が画面一杯まで表示されてしまう。必要な大きさだけ表示したいのだが。UIPickerView を表示すると特に無駄スペースが多い。
UIPickerView に遷移するとPopoverの色が黒くなるのだがこれはそういうものなのだろうか。
関連記事
-
-
iPad用ペン AluPen を買ってみた。
年末に注文したAluPenをようやく入手。品薄で1ヶ月かかってしまった。Amazonで2404円。紹
-
-
タッチ! アメリカ地図 1.0.1 アップデート
タッチ! アメリカ地図 のアップデート(バージョン 1.0.1)を8月から5ヶ月ぶりにApp Sto
-
-
[iOS開発本] 15歳からはじめる iPhone わくわくゲームプログラミング教室
CALayerの使い方が書かれている本を持っていない気がしたので参考になりそうだったのと、高速バスで
-
-
[iPhone開発本] オライリー iPhoneアプリケーション開発ガイド 感想その1
面白そうだったので発売日に買ってみた。1995円と安いのもすばらしい。 しかしタイトルは一ひねりした
-
-
EverLearn 1.7.5 を公開しました
英単語学習アプリ EverLearn 1.7.5 を公開しました。変更点エビングハウスの忘却曲線を参
-
-
基礎から学ぶ CoronaSDK
基礎から学ぶ CoronaSDK という本が2012/2/25にでるらしい。 昔 CoronaSDK
-
-
PebbleアプリのPebble Time Round対応
BeforeAfter 丸くなったPebbleを初レビュー。ギークじゃなくても使えるスマートウォッチ
-
-
Apple Developer Program 更新 2017
今年も Developer Program を更新。今年は11800円+税だった。そして証明書も更新
-
-
[iPhone SDK] UILabel からポップアップメニューを表示してみる
今作っているアプリに UILabel を複数置いた画面があるが、その UILabelたちは編集
-
-
ITMS-90175 Legacy Language Designator
自分は自作アプリの非常に古いプロジェクトをいまだにメンテすることがあるので、ITMS-90
Comment
NavigationControllerのviewDidLoadあたりで、下のように設定すると必要な大きさだけ表示可能です。
self.contentSizeForViewInPopover = CGSizeMake(width, height);
わざわざ書き込みありがとうございます。
後ほど試してみます。