ABUnknownPersonVIewController and NavigationBarColor - ios

I've converted an app from ios6 to ios7. The app sets the background color of the navigationbar in the following way.
[[UINavigationBar appearance] setBackgroundColor: [UIColor blueColor]];
This works fine almost everywhere. But when I use the ABUnknownPersonViewController and click "create new contact" or "add to existing contact" the header is white on white background.
Is there any way to change the navbar background color of this view?
The view is initiated like this
ABUnknownPersonViewController *picker = [[ABUnknownPersonViewController alloc] init];
picker.unknownPersonViewDelegate = self;
picker.displayedPerson = aContact;
picker.allowsAddingToAddressBook = YES;
picker.allowsActions = YES;
picker.alternateName = self.contact.fullName;
picker.title = self.contact.fullName;
[self.navigationController pushViewController:picker animated:YES];
The first view looks fine with the custom header/background color. It's when you click "add" or "create" that the header goes white.
Thanks
Johan

Try
[[UINavigationBar appearance] setBarTintColor: [UIColor blueColor]];

try like this....
ABUnknownPersonViewController *picker = [[ABUnknownPersonViewController alloc] init];
UINavigationController *newNavigationController = [[UINavigationController alloc] initWithRootViewController:picker];
// customise navigation bar of navigation controller
[self presentModalViewController:newNavigationController animated:YES];

Related

UISearchBar MinimalStyle Selected Color

My UISearchBar in my UISearchController is acting funny when I tap it.
There are three states to the look of the bar.
1: Untapped
2: Tapped
3: Tapped with Text
As you can see, the third one's color is off. Instead of being black like the others, it's tint color is white.
Here's the code chunk containing the setup of the UISearchController & UISearchBar
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:[NSBundle mainBundle]];
UINavigationController *navController = (UINavigationController *)[storyboard instantiateViewControllerWithIdentifier:#"searchVC"];
self.theSearchController = [[UISearchController alloc] initWithSearchResultsController:navController];
self.theSearchController.searchResultsUpdater = self;
self.theSearchController.searchBar.placeholder = #"Search";
self.theSearchController.delegate = self;
self.theSearchController.dimsBackgroundDuringPresentation = YES;
self.theSearchController.searchBar.delegate = self;
self.theSearchController.hidesNavigationBarDuringPresentation = YES;
self.definesPresentationContext = YES;
[self.theSearchController.searchBar sizeToFit];
[self.theSearchController.searchBar setTintColor:[UIColor whiteColor]];
[self.theSearchController.searchBar setBarTintColor:[UIColor blackColor]];
[self.theSearchController.searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:#"SearchBG.png"] forState:UIControlStateNormal];
[self.theSearchController.searchBar setBarStyle:UIBarStyleBlackTranslucent];
[self.theSearchController.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[self.tableView setTableHeaderView:self.theSearchController.searchBar];
I just stumbled upon the answer in my storyboard file.
The UINavigationController that the UISearchController was connected to of course had a UINavigationBar. When you tapped and inserted a letter, the UISearchBar blended into the UINavigationBar, inheriting it's color. Once I made the style of the UINavigationBar to Black, the UISearchBar inherited it and it worked.

UIImagePickerController inside UIPopoverController doesn't show Cancel button on iOS7

I'm using UIImagePickerController inside a UIPopoverController to select image just from photo albums. When I launch app on device running iOS 8, the Cancel button on the top right of the pop over appeared normally like this:
But when I launch the app on device running iOS 7, the Cancel button disappeared:
The code I used to show the picker:
UIImagePickerController *pickerController = [[UIImagePickerController alloc] init];
[pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
pickerController.delegate = self;
_popOver = [[UIPopoverController alloc] initWithContentViewController:pickerController];
_popOver.delegate = self;
pickerController.navigationBar.tintColor = [UIColor redColor];//Cancel button text color
[pickerController.navigationBar setTitleTextAttributes:#{NSForegroundColorAttributeName: [UIColor blackColor]}];// title color
if (isImage) {
[pickerController setMediaTypes:#[(NSString*)kUTTypeImage]];
} else
[pickerController setMediaTypes:#[(NSString*)kUTTypeMovie]];
[_popOver presentPopoverFromRect:CGRectMake(1024/2, 768/2, 1, 1) inView:self.view permittedArrowDirections:0 animated:YES];
What can I do to show that Cancel button on iOS7? My app design doesn't allow user to dismiss the popover by tapping anywhere outside the popover view.
Thank you.
#JozoL Write the Below Code this works
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UINavigationItem *pickerNavBarTopItem;
// add done button to right side of nav bar
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:#"Cancel"
style:UIBarButtonItemStylePlain
target:self
action:#selector(doSomething)];
UINavigationBar *bar = navigationController.navigationBar;
[bar setHidden:NO];
pickerNavBarTopItem = bar.topItem;
pickerNavBarTopItem.rightBarButtonItem = doneButton;
}
-(void)doSomething{
}
For swift2.x you can try below code, Its work for me
pickerController.navigationBar.tintColor = UIColor.blueColor()
In my case, UIImagePickerController was not showing its cancel button
. So I tried adding this line to code:
pickerController.navigationBar.barStyle = UIBarStyleDefault;
And this worked for me.Try setting color of Cancel button like this
pickerController.navigationBar.tintColor = [UIColor blackColor];
Try using this code and let me know if it helps you.

UITabBarController initially highlights all tab bar item images

I'm programmatically instantiating a UITabBarController that will manage 2 view controllers, and then setting it as the rootViewController. However when the views appear, it highlights all the tab item's images (although the text is properly highlighted). No matter what I set to the selectedIndex the images will all appear highlighted. Only when you tap on the tab bar items does it actually toggle the highlighted state on the images. What's going on here?
Code:
UITabBarController *tabController = [[UITabBarController alloc] init];
UIStoryboard *storyboard = [self storyboard];
OGVideoStreamViewController *questionsController = [storyboard instantiateViewControllerWithIdentifier:#"OGVideoStreamViewController"];
questionsController.isQuestion = YES;
OGVideoStreamViewController *answersController = [storyboard instantiateViewControllerWithIdentifier:#"OGVideoStreamViewController"];
answersController.isQuestion = NO;
OGMatchesViewController *matchesController = [[OGMatchesViewController alloc] initWithNibName:#"OGMatchesViewController" bundle:nil];
questionsController.tabBarItem = [[UITabBarItem alloc] initWithTitle:#"Questions" image:[UIImage imageNamed:#"Tab Icon - Questions"] tag:0];
answersController.tabBarItem = [[UITabBarItem alloc] initWithTitle:#"Answers" image:[UIImage imageNamed:#"Tab Icon - Answers"] tag:1];
matchesController.tabBarItem = [[UITabBarItem alloc] initWithTitle:#"Inbox" image:[UIImage imageNamed:#"Tab Icon - Inbox"] tag:2];
[tabController setViewControllers:#[questionsController, answersController, matchesController] animated:NO];
tabController.selectedViewController = questionsController;
[[UIApplication sharedApplication] keyWindow].rootViewController = tabController;
I've had the same problem and it was due to me calling:
[UIView appearance].tintColor = [UIColor colorWithRed:1.000
green:0.793
blue:0.236
alpha:1.000];
I called it in my AppDelegate, so i could change it to the following:
self.window.tintColor = [UIColor colorWithRed:1.000
green:0.793
blue:0.236
alpha:1.000];

Control Nav Bar Tints with PSPDF

Hi I have a PSPDFViewController embedded in a UINavigationController which I then have as the left controller in a splitview controller.
I have set the colour of the navbar to match the right hand controllers nav bar however it seems PSPDFKit is changeing the colour or alpha slightly. Is there any way I can turn this off?
Here is how I'm creating the controller:
PSPDFViewController *pspdfController = [[PSPDFViewController alloc] initWithDocument:document];
UINavigationController *pspdfNavigationController = [[UINavigationController alloc] initWithRootViewController:pspdfController];
pspdfNavigationController.barTintColor = [[UIColor alloc] initWithRed:252.0/255.0 green:14.0/255.0 blue:47.0/255.0 alpha:1.0];;
pspdfNavigationController.backgroundColor = [[[UIColor alloc] initWithRed:252.0/255.0 green:14.0/255.0 blue:47.0/255.0 alpha:1.0];
pspdfNavigationController.tintColor = [UIColor whiteColor];
navbar.translucent = NO;
Lulz:
self.transparentHUD = NO;

UITabBar appearance setSelectionIndicatorImage does not work on first launch iOS7

I have a customised UITabBar and use the following code in the AppDelegate:
- (void)tabBarController:(MainUITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[self customizeTabBar];
}
- (void)customizeTabBar {
NSLog(#"*******customizeTabBar*******");
UIImage *tabBackground = [[UIImage imageNamed:#"unselectedtab"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set background for all UITabBars
[[UITabBar appearance] setBackgroundImage:tabBackground];
// Set tint color for the images for all tabbars
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
// Set selectionIndicatorImage for all tabbars
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:#"selectedtab"]];
}
- (void)tabBarController:(MainUITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
NSLog(#"*******didEndCustomizingViewControllers*******");
}
This is all fine in iOS5+ but in 7 on first load the first TabBarItem the item indicator is white and the button seems to have been selected but the "selectedTab" image is not loaded.
When I press another tab the new tab is red and appears correctly - as does the first or any tab bar item selected after this - it only doesn't work on first launch.
customizeTabBar get called but the selected image does not appear on first launch.
didEndCustomizingViewControllers does not seem to get called at all.
This doesn't work in emulator or device on iOS7 - but does on iOS5, 6.
Any ideas?
Thanks in advance.
Setting the selection indicator image for the tab bar directly once again, apart from doing it via appearance, worked for me!
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
....
UITabBarController *tabBarContr = (UITabBarController *)self.window.rootViewController;
...
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:#"tab_bar_selection_indicator.png"]];
// iOS7 hack: to make selectionIndicatorImage appear on the selected tab on the first app run
[[tabBarContr tabBar] setSelectionIndicatorImage:[UIImage imageNamed:#"tab_bar_selection_indicator.png"]];
return YES;
}
I am seeing this exact same issue. Here is my didFinishLaunching
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self applyStyleSheet];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.backgroundColor = [UIColor redColor];
self.window.tintColor = [UIColor whiteColor];
UITabBarController *tabBarController = [self setupTabBarController];
self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Here is how I setup the tab bar:
- (UITabBarController *)setupTabBarController
{
UITabBarController *tabBarController = [[UITabBarController alloc] init];
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:[[FirstViewController alloc] init]];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:[[SecondViewController alloc] init]];
UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:[[ThirdViewController alloc] init]];
UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:[[FourthViewController alloc] init]];
UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:[[FifthViewController alloc] init]];
[tabBarController setViewControllers:#[nav1, nav2, nav3, nav4, nav5]];
return tabBarController;
}
And finally, this is the tab bar customization block:
- (void)applyStyleSheet
{
UITabBar *tabBar = [UITabBar appearance];
[tabBar setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]]];
[tabBar setTintColor:[UIColor whiteColor]];
[tabBar setSelectionIndicatorImage:[UIImage imageNamed:#"tab-selected"]];
[tabBar setSelectedImageTintColor:[UIColor whiteColor]];
}
As stated, the "tab-selected" image is not loaded on the first tab. However, I added the following line after [self.window makeKeyAndVisible] so that my tab starts up with a different tab opened, and the "tab-selected" image does show up on this tab:
[tabBarController setSelectedIndex:1];
So here's my finalized didFinishLaunching with the subtle hack that makes it work :)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self applyStyleSheet];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.backgroundColor = [UIColor redColor];
self.window.tintColor = [UIColor whiteColor];
UITabBarController *tabBarController = [self setupTabBarController];
self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
[tabBarController setSelectedIndex:1];
[tabBarController setSelectedIndex:0];
return YES;
}
ok.
not the best of fixes but hey have to submit.
Remove the customisation code in the appdelegate and in the projects xib file (is an old project) on the TabBars attributes inspector (using xcode 5) - add the tab bars background and selection images.
This works for ios7 without the need for any of the customisation code in the appdelegate.
For pre iOS5 + 6 (this app only supports 5+) however we still need the code so I added a simple check for version and kept the code as is:
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
if(SYSTEM_VERSION_LESS_THAN(#"7.0"))
{
UIImage *tabBackground = [[UIImage imageNamed:#"unselectedtab"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set background for all UITabBars
[[UITabBar appearance] setBackgroundImage:tabBackground];
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
// Set tint colour for the images for all tabbars
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
// Set selectionIndicatorImage for all tabbars
[[UITabBar appearance] setSelectionIndicatorImage:nil];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:#"selectedtab.png"]];
}
I think I also have had the same problem when doing my design for the new App in iOS 7!!
iOS 7 has been built more of the stuff different as we all were used to things different.
Here as I have understood we all were using StoryBoards, and were unable to integrate that Segues in our Code! :)
So I choose not to mess with the code, after I tried most of all the StackOverFlow Answers regarding this! :) Because, why you wanna do so, when you have given a Goody Good Interface Builder (IB) and Story Boarding Tool?
Question:
When we have set our Selected Tab Image, background image specially for the tab bar, it doesn't shows which tab is selected with the image we have set in our code...???
Solution
Following are the screenshots of my StoryBoard Settings I did to solve this problem!
Select your TabBarController from your via document outline panel:
Set your settings for the Tab Bar from the Utilities Panel:
Then your Program is set up to run! It now knows that first tab is selected when the App first shows the First Tab View and also which image should be shown for all the Tab Bar indicators when each of them are selected! :)
hope you all got a clue!!!
If I helped you I'm Happy!!!
But if I have wasted your Time I'm So Sorry!!! :(
But trust me, This worked me like a charm!!!
- (void)customizeTabBar {
UIImageView *customizeTabBar = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,320.0,50)];
customizeTabBar.image=[UIImage imageNamed:#"Tab_bar.png"];
firstTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"tab1.png"] highlightedImage:[UIImage imageNamed:#"tab11.png"]];
[firstTab setFrame:CGRectMake(8.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: firstTab];
secondTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"tab2"] highlightedImage:[UIImage imageNamed:#"tab22"]];
[secondTab setFrame:CGRectMake(115.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: secondTab];
thirdTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"tab3"] highlightedImage:[UIImage imageNamed:#"tab33"]];
[thirdTab setFrame:CGRectMake(223.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: thirdTab];
self.tabBar.tag=10;
[self.tabBar addSubview:customizeTabBar];
}

Resources