iPhone開発のネタ帳: UIPopoverController に UIPickerView をいれる

公開日: : 最終更新日:2012/06/30 iPad

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の色が黒くなるのだがこれはそういうものなのだろうか。

関連記事

no image

最近読んだ本: これでiPhoneアプリが1000万本売れた 南雲 玲生著

周りでおもしろいと言っている人がいたので買ってみた。2011/05/21発売。 株式会社ユードーの南

記事を読む

no image

iPad アプリの iOS Deployment Target に設定するバージョン値を検討する

自作アプリのiPadの対応バージョンを決める際に、一番古くから対応していることにした場合どのバージ

記事を読む

[iOS SDK][Kindle] iOS7開発テクニック集 Xcode編

iOS7開発テクニック集 Xcode編 ZuvolaZuvola 2014

記事を読む

no image

iOS Developer Program 更新(2回目)

4月はじめにiOS Developer Program の期限が切れるので、Apple から

記事を読む

no image

iPhone/iPad で教育

この本は面白そう。今後は教育分野での応用も増えていくだろう。 その時に、iPhone/iPad は教

記事を読む

no image

[iPhone SDK] Apple Push Notification を利用したアプリをサポートする Easy APNS

以前 apns-php を使ってApple Push Notification を実行する話を書いた

記事を読む

no image

最近読んだ本 iPhoneデジカメプログラミング

カメラアプリを作る予定はなかったので2011年3月に発売されてからしばらく様子を見ていたが、そろそろ

記事を読む

NSInternalInconsistencyException

久しぶりにiOS6以前のアプリをビルドしたら NSInternalInconsistencyExce

記事を読む

no image

スティーブ・ジョブズの王国 ― アップルはいかにして世界を変えたか?

Amazonからおすすめされてたまたま発見した本。2010年11月12日発売らしい。 原書はRetu

記事を読む

[iOS SDK] iPad 専用アプリをiPhoneでも使えるようにする

 iPad 初代やiPad2の頃は、iPhoneとiPadの画面サイズがかなり異なり、また

記事を読む

Comment

  1. tilde より:

    NavigationControllerのviewDidLoadあたりで、下のように設定すると必要な大きさだけ表示可能です。

    self.contentSizeForViewInPopover = CGSizeMake(width, height);

  2. admin より:

    わざわざ書き込みありがとうございます。
    後ほど試してみます。

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Apple Developer Program更新 2024

今年も更新した。 昨年はブログに記録し忘れたらしい。 今

ポモドーロテクニック用物理タイマーならTime Timer

会社ではなかなか自由に時間を使えないが、家で読書や作業をする

DELL 32インチディスプレイ U3223QE 購入

Dell U3223QE は解像度 3840x216

WWDC 2023 Vision Pro発表

2023/6/5 (日本時間 2023/06/06 2AM)のWWD

M1 MacBook Air を Venturaにアップデートする

M1 MacBook Air を macOS Montere

→もっと見る

PAGE TOP ↑