ということでいろいろ試した。
PopoverはUIPopoverControllerオブジェクトを利用する。で、このオブジェクトはIBにはないので、コードで書かなきゃいけない(ということに気づくまでかなりかかった)わけで。だがIBを使わない方法がわからない初心者にとっては(ry
UIPopoverControllerは中にたいていのViewは取り込めてしまう模様。インスタンスを作るときは
UIViewController* targetView = [[[UIViewController alloc]init] autorelease]; UIPopoverController* popover = [[UIPopoverController alloc]initWithCOntentViewController:targetView];
UIViewControllerの作り方ってこれでいいんだっけ;あとでテーブルヴューの場合で書いときます。
表示に際しては自分でデリゲートを受け取ってやる必要があるようです。たぶん。
popover.delgate = self.view;
警告が出てるのでなんかもっとやり方があるのかも。
実際に表示させるところは
if(!popover.popoverVisible){ [popover presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; }
この場合はメインのナビゲーションバーの右側のアイテムをタップすると表示されるようになっています。こまけぇことはまだわかりませんorz
とりあえずよくあるようにpopoverにTableView上のメニューを表示させるやり方。表示だけでpopoverの中で何か操作ができる訳ではありません。
//TableViewを作る UITableView* tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0,300,300) style:UITableViewStylePlain]; //TableViewControllerを作る UITableViewController *settingVC = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain]; //ControllerとViewをくっつける [settingVC.view addSubview:tableView]; //とりあえずNavigation Barもつけておく NSString* settings = NSLocalizedString(@"Settings", @"Settings"); UINavigationController* theNavController = [[UINavigationController alloc]initWithRootViewController:settingVC]; theNavController.navigationBar.topItem.title = settings; [theNavController setNavigationBarHidden:NO]; [theNavController setToolbarHidden:NO]; //イベントが来たら表示する popover = [[UIPopoverController alloc]initWithCOntentViewCOntroller:theNavController]; popover.delegate = self.view; [settingVC release]; [theNavController release]; [tableView release]; [listOfContents release]; //popoverが表示されていなかったら表示する if(!popover.popoverVisible){ [popover presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; } [popover release];
その場でオブジェクトつくって表示させていますが、popoverとかtableViewとかその他諸々はインクルードファイルの法で作るべきかとはおもいます。