I'm having a problem with trying to change the colour of my navigation controller inside my popoverController.
I'm trying to do something like this:
if (self.popoverController == nil) {
ArtistsViewController *artistsViewController =
[[ArtistsViewController alloc]
initWithNibName:@"ArtistsViewController"
bundle:[NSBundle mainBundle]];
artistsViewController.navigationItem.title = @"Artists";
UINavigationController *navController =
[[UINavigationController alloc]
initWithRootViewController:artistsViewController];
UIPopoverController *popover =
[[UIPopoverController alloc]
initWithContentViewController:artistsViewController.navigationController];
artistsViewController.navigationController.navigationBar.tintColor=[UIColor greenColor];
popover.delegate = self;
[artistsViewController release];
[navController release];
self.popoverController = popover;
[popover release];
}
[self.popoverController
presentPopoverFromBarButtonItem:sender
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
but it doesn't work. any suggestions?
////////////////////////////////////////
////////////**SOLUTION**////////
////////////////////////////////////////
I'm gonna edit this post because i solved my problem and I think could be helpful share my solution here:
first of all, follow this sample:
http://mobiforge.com/designing/story/using-popoverview-ipad-app-development
When It is done go to step two.
The second step will be add a new popoverBackgroundViewClass:
Add new file in your project Objective class and call it 'CustomPopoverBackgroundView'
///////////////////////////////////////////////
////// CustomPopoverBackgroundView.h /////////
///////////////////////////////////////////////
#import < UIKit/UIKit.h >
#import < UIKit/UIPopoverBackgroundView.h >
@interface CustomPopoverBackgroundView : UIPopoverBackgroundView{
UIPopoverArrowDirection direction;
CGFloat offset;
}
@end
//////////////////////////////////////////////
////// CustomPopoverBackgroundView.m /////////
//////////////////////////////////////////////
#import "CustomPopoverBackgroundView.h"
@implementation CustomPopoverBackgroundView
- (void)layoutSubviews {
[super layoutSubviews];
CGFloat fullHeight = self.frame.size.height;
CGFloat fullWidth = self.frame.size.width;
CGFloat startingLeft = 0.0;
CGFloat startingTop = 0.0;
CGFloat arrowCoord = 0.0;
UIImage *arrow;
UIImageView *arrowView;
switch (self.arrowDirection) {
case UIPopoverArrowDirectionUp:
startingTop += 13.0;
fullHeight -= 13.0;
//the image line.png will be the corner
arrow = [UIImage imageNamed:@"line.png"];
arrowCoord = (self.frame.size.width / 2) - self.arrowOffset;
arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(arrowCoord, 0, 13.0, 13.0)] autorelease];
break;
case UIPopoverArrowDirectionDown:
fullHeight -= 13.0;
arrow = [UIImage imageNamed:@"line.png"];
arrowCoord = (self.frame.size.width / 2) - self.arrowOffset;
arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(arrowCoord, fullHeight, 13.0, 13.0)] autorelease];
break;
case UIPopoverArrowDirectionLeft:
startingLeft += 13.0;
fullWidth -= 13.0;
arrow = [UIImage imageNamed:@"line.png"];
arrowCoord = (self.frame.size.height / 2) - self.arrowOffset;
arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, arrowCoord, 13.0, 13.0)] autorelease];
break;
case UIPopoverArrowDirectionRight:
fullWidth -= 13.0;
arrow = [UIImage imageNamed:@"line.png"];
arrowCoord = (self.frame.size.height / 2) - self.arrowOffset;
arrowView = [[[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width-13.0, arrowCoord, 13.0, 13.0)] autorelease];
break;
}
//this image will be your background
UIImage *bg = [[UIImage imageNamed:@"lineBack.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0)];
UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(startingLeft, startingTop, fullWidth, fullHeight)] autorelease];
[imageView setImage:bg];
[arrowView setImage:arrow];
[self addSubview:imageView];
[self addSubview:arrowView];
}
- (CGFloat) arrowOffset {
return offset;
}
- (void) setArrowOffset:(CGFloat)arrowOffset {
offset = arrowOffset;
[self setNeedsLayout];
}
- (UIPopoverArrowDirection)arrowDirection {
return direction;
}
- (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection {
direction = arrowDirection;
[self setNeedsLayout];
}
+ (CGFloat)arrowHeight {
return 30.0;
}
+ (CGFloat)arrowBase {
return 30.0;
}
+ (UIEdgeInsets)contentViewInsets {
return UIEdgeInsetsMake(30.0, 30.0, 30.0, 30.0);
}
@end
Third step:
When It is done add this line in 'PopOverExample1ViewController.m':
import the new class:
#import " CustomPopoverBackgroundView.h "
-(IBAction) showMovies:(id) sender {
if (self.popoverController == nil) {
MoviesViewController *movies =
[[MoviesViewController alloc]
initWithNibName:@"MoviesViewController"
bundle:[NSBundle mainBundle]];
UIPopoverController *popover =
[[UIPopoverController alloc] initWithContentViewController:movies];
popover.delegate = self;
[movies release];
//THIS IS THE LINE THAT YOU HAVE TO ADD
popover.popoverBackgroundViewClass=[CustomPopoverBackgroundView class];
self.popoverController = popover;
[popover release];
}
[self.popoverController
presentPopoverFromBarButtonItem:sender
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
-(IBAction) btnShowMovies:(id) sender {
if (self.popoverController == nil) {
MoviesViewController *movies =
[[MoviesViewController alloc]
initWithNibName:@"MoviesViewController"
bundle:[NSBundle mainBundle]];
UIPopoverController *popover =
[[UIPopoverController alloc] initWithContentViewController:movies];
popover.delegate = self;
[movies release];
//THIS IS THE LINE THAT YOU HAVE TO ADD
popover.popoverBackgroundViewClass=[CustomPopoverBackgroundView class];
self.popoverController = popover;
[popover release];
}
CGRect popoverRect = [self.view convertRect:[btn frame]
fromView:[btn superview]];
popoverRect.size.width = MIN(popoverRect.size.width, 100);
[self.popoverController
presentPopoverFromRect:popoverRect
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
Alright!!! Thats all! If someOne needs help just let me know. Best wishes!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With