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の色が黒くなるのだがこれはそういうものなのだろうか。
関連記事
-
-
AirMac Extreme Base Station がほしい 2011/05/07
自宅の無線LANルータが不安定なので、AirMac Extremeを買おうかと悩み中。 自宅にApp
-
-
[iPhone SDK] Significant-change Location Service の挙動
iPhoneで位置情報取得を連続して行うと、あっという間に電池が無くなってしまう。これは、位置情報取
-
-
[iOS SDK] Simulator で Save Screenshot するとクラッシュ
「libswiftFoundation.dylib プラグインの使用中に Simulator が予期
-
-
[iOS SDK] Game Center の Leaderboard 機能を利用してみた
自分で作っている英単語学習アプリを自分でひたすらテストをしているのだけれども、実際やってみるとなかな
-
-
UIScrollView の上で UIView を動かしたい
今作っているiPadアプリで、画面をピンチインアウトで拡大縮小して、さらにその上でドラッグで部品を動
-
-
EverLearn 2.2.1 を公開しました
自作英単語学習アプリ EverLearn 2.2.1を公開しました。 ユーザの方から
-
-
[iOS] iPhone とつながるG-SHOCKの注意すべき仕様
CASIO 腕時計 G-SHOCK ジー・ショック Bluetooth Low Energy対応
-
-
iPad/iPhone 開発本が山のように出るようだ
なんつーかもうすごい状況。もっと出るみたい。 Beginning iP
-
-
[iOS] 取り下げになったアプリを更新
しばらく更新していなかったら App Store から取り下げになった「タッチにほんちず」アプ
-
-
iOS4プログラミングブック の感想など。
前評判によるとかなりの力作のようなので、久しぶりにiOSの本を買ってみた。 ソースコードはすでに発売
Comment
NavigationControllerのviewDidLoadあたりで、下のように設定すると必要な大きさだけ表示可能です。
self.contentSizeForViewInPopover = CGSizeMake(width, height);
わざわざ書き込みありがとうございます。
後ほど試してみます。