在UIPopoverController中自定义titleView

时间:2011-05-18 09:39:07

标签: ios ipad uinavigationcontroller uipopovercontroller

在iPad应用程序中,我希望能够在弹出框的顶部栏中放置多个按钮。我这样推出它:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];

pop = [[UIPopoverController alloc] initWithContentViewController:nc];
[pop presentPopoverFromRect:CGRectInset([tableView rectForRowAtIndexPath:indexPath], 10, 10)
                     inView:tableView
   permittedArrowDirections:UIPopoverArrowDirectionAny
                   animated:YES];
pop.delegate = self;
[nc release];

viewDidLoad我想将titleView设置为包含多个UIBarButtonItems。这是正常的UINavigationController,但我需要能够执行此操作并在弹出窗口上保留导航栏的自定义样式。

我尝试将rightBarButtonItem设置为包含按钮的工具栏,但它们采用工具栏的格式,工具栏本身不会采用弹出框的格式/样式。

4 个答案:

答案 0 :(得分:1)

有点hackish,但你可以通过子类化和覆盖drawRect:创建一个真正透明的UIToolbar:使用空方法。这仍然会在工具栏上绘制UIBarButtonItems,但不会绘制工具栏本身。

然后,如Nils所述,您可以从自定义工具栏实例中创建一个条形按钮项,并将其添加为rightBarButtonItem。

答案 1 :(得分:0)

为什么不使用UIViewUIToolbar代替UINavigationBar的自定义UIPopoverController

效果,是相同的

答案 2 :(得分:0)

首先,您需要设置UINavigationController的委托,然后实现nabigationController:willShowViewController:animated:方法。在此方法中,您可以调整左右栏按钮项目。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

    viewController.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] 
                                                        initWithTitle:@"Image Source" 
                                                        style:UIBarButtonItemStylePlain 
                                                        target:self 
                                                        action:@selector(cancelPressed)] autorelease]; 
}

答案 3 :(得分:0)

我遇到了同样的问题,这就是我所做的:

UIBarButtonItem *uiBarRefresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(forcerefresh)];
UIBarButtonItem *uiBarCurl = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPageCurl target:self action:@selector(showlist)];

UIToolbar_transparent* tools = [[UIToolbar_transparent alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)];
tools.barStyle = UIBarStyleBlackTranslucent;
tools.translucent = YES;
tools.backgroundColor = [UIColor clearColor];
tools.tintColor = self.navigationController.navigationBar.tintColor;
[tools setItems:[NSArray arrayWithObjects:flexItem,uiBarRefresh,uiBarCurl,nil] animated:NO];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];

通过这种方式,您可以避免暗淡的灰色背景,令人讨厌的白色下划线,并且您可以使用固定或弹性间距完全自定义您想要的位置。

祝你的项目好运:]