Hatena::Groupiphone-dev

淡々とめもりんぐ

2010-09-16

[]Popover出したい! 18:11

ということでいろいろ試した。

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とかその他諸々はインクルードファイルの法で作るべきかとはおもいます。