开发者

Customising the titleView in a UIPopoverController

On an iPad application, I want to be able to have multiple buttons in the top bar of a popover. I'm launching it like this:

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];

In the viewDidLoad I want to set the titleView to contain multiple UIBarButtonItems. This is ok on a normal UINavigationController but I need to be able to do this and keep the custom style of the navigation bar on the popover.

I have tried setting the rightBarButtonItem to have a toolbar that contains buttons, but they take the format of the toolba开发者_如何学JAVAr, which itself will not take the format/style of the popover.


It's a bit hackish, but you can create a truly transparent UIToolbar by subclassing and overriding drawRect: with an empty method. This will still draw the UIBarButtonItems on the toolbar, but not the toolbar itself.

Then, as Nils describes, you can create a bar button item out of the custom toolbar instance and add it as the rightBarButtonItem.


Why you don't use a custom UIView with a UIToolbar or UINavigationBar instead of UIPopoverController?

The effect, is the same!


First you need to set a delegate to the UINavigationController and then implement the nabigationController:willShowViewController:animated: method. In this method you can adjust the left and right bar button items.

- (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]; 
}


I had the same problem, and here is what I did :

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];

This way you avoid the dull grey background, the pesky white underline, and you can completely customize how you want them positioned, by using fixed or flex spacings.

Best of luck with your project :]

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜