MFMessageComposeViewController: Cannot Style "Cancel" Button in Dark Mode - objective-c

I'm currently trying to style the "cancel" button that is in the top right corner (the navigation bar and the button are both grey) and I am having no luck. I've tried calling several different methods and none have worked. My project builds for iOS12.1 and I'm testing via iOS15.4. Here is what I've tried so far:
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:#"Futura-Medium" size:17.0f],
NSFontAttributeName,
[UIColor blueColor],
NSForegroundColorAttributeName,
nil]];
MFMessageComposeViewController *messageController;
[messageController.navigationBar setTintColor:[UIColor blueColor]];
messageController = [MFMessageComposeViewController new];
[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:[NSArray arrayWithObject:[UINavigationBar class]]].tintColor = [UIColor RepublicBrightBlue];

The gray color for the button is likely coming from the global tint color for your application. This is by default AccentColor that comes within Assets (this is mapped via Build Settings). Note that you can define separate global accent colors for Any, Light, Dark
If you're just interested in styling this MFMessageComposeViewController the following worked for me to change the tint color for all views within the message view:
MFMessageComposeViewController *messageController = [MFMessageComposeViewController new];
[self presentViewController:messageController animated:true completion:nil];
[UIView appearanceWhenContainedInInstancesOfClasses:[NSArray arrayWithObject:[MFMessageComposeViewController class]]].tintColor = [UIColor redColor];
Which results in

Related

Customizing UINavBar with custom color and without hairline

I want to set my navigation bar to the same color as my UITableViewCell(s), while also hiding the pixel line between the navigation bar and the cells.
The code I've used, in the AppDelegate didFinishLaunchingWithOptions, is this:
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:0.465639 green:0.763392 blue:1 alpha:1]];
It removes the pixel line and sets the Nav Bar's color.
However, it leaves the status bar as transparent and my table view appears in the status bar when I scroll down.
How can I add the color to the status bar as well?
Thanks!
If its a solid colour you could always use:
self.navigationController.navigationBar.translucent = NO;
To stop the content going behind the bar
And use the new barTint property
self.navigationController.navigationBar.barTintColor = [UIColor redColor];

iOS 7, unselected tint color?

I'm upgrading my app to meet iOS 7 guidelines. My main tab bar controller has a blue background and the default gray "unselected" tint makes the icons nearly invisible. How can I change the tint for these icons? I'd like them to be black or something that contrasts a lot with the blue background.
I've already configured an app-wide tint using window.TintColor = White, but that only changes the selected color. (Same with TabBar.TintColor)
I haven't tested it, but this answer looks like it's unfortunately the only solution
https://stackoverflow.com/a/18433996/1732987
Update: Copied code for posterity.
// set color of selected icons and text to red
self.tabBar.tintColor = [UIColor redColor];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor redColor], UITextAttributeTextColor, nil] forState:UIControlStateSelected];
// set color of unselected text to green
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], UITextAttributeTextColor, nil]
forState:UIControlStateNormal];
// set selected and unselected icons
UITabBarItem *item0 = [self.tabBar.items objectAtIndex:0];
// this way, the icon gets rendered as it is (thus, it needs to be green in this example)
item0.image = [[UIImage imageNamed:#"unselected-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// this icon is used for selected tab and it will get tinted as defined in self.tabBar.tintColor
item0.selectedImage = [UIImage imageNamed:#"selected-icon.png"];

changing the text attributes of nav bar

i want to change the appearance of the nav bar, and so far i was able to change the background image of the nav bars, and also with the color.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
//set the bg image of all nav bars
UIImage *navBackgroundImage = [UIImage imageNamed:#"navigationBackground.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
return YES;
//customizing the title text of the nav bars
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0/255.0 green:250.0/250.0 blue:240.0/240.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,
[UIFont fontWithName:#"Heiti TC" size:21.0], UITextAttributeFont, nil]];
}
this is the code i used to achieve changing the nav bar bg image and the color. if you look into the 2nd UINavigationBar appearance statement, i try to set the font of the nav bar with
[UIFont fontWithName:#"Heiti TC" size:21.0]
but it wont change the font. btw i run this with iphone 6.1 simulator on xcode 4.6.2. im am sure that the font name is "Heiti TC".
Maybe it doesn't work because you
return YES;
before changing the font?
The name supplied for the method fontWithName is not the same as the displayed family name of the font.
Try "STHeitiTC-Light" or "STHeitiTC-Medium" instead.
[UIFont fontWithName:#"STHeitiTC-Medium" size:21.0]
And put the
return YES
at the end of the didFinishLaunchingWithOptions.
PS: The answer here is quite helpful to find the font name to be used: Cant find custom font - iOS
Everything looks right. I have used similar code to achieve it as expected. Have you tried using the font Heiti TC Light or Heiti TC Medium?

Remove TabBar Button glow(not on image- hiding the selection tint of button)

I've created a tabbar application,I am using a custom TabBar with a backGround image.
I have finished all the parts but unable to remove the glow of tabbar button on click(i just changing the UIButton selection on click,but glow is still there)
How to hide the glow of UITabBar Buttons(ie hiding the selection tint of buttons) ?
Now TabBar is like this..
Need tabBar like this
You can use the following code.
[[UITabBar appearance] setSelectionIndicatorImage:[[UIImage alloc] init]];
Try It.
To change tabbar tint colour
[[UITabBar appearance] setSelectedImageTintColor:[UIColor grayColor]];
This will definitely help you. Simply create an UIImage object and pass it to setSelectionIndicatorImage property .
[yourTabbar setSelectionIndicatorImage:[[UIImage alloc] init]];
[self.tabBarController.tabBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:#"1.png"]] autorelease] atIndex:1];
You need to set UITabBarItem appearance:
[[UITabBarItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor yellowColor], UITextAttributeTextColor,
[UIFont systemFontOfSize:14.0f], UITextAttributeFont,nil]
forState:UIControlStateHighlighted];

Changing Text Color of Unselected UITabBarItems

Here's what I've tried:
I've tried the following in the parent view controller:
[self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
nil] forState:UIControlStateNormal];
I've tried the following in the application delegate:
[[UITabBarItem appearance]
setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
nil]
forState:UIControlStateNormal];
I've even tried changing UIControlStateNormal to any of the other available constants. The only one that changes anything is UIControlStateHighlighted which changes the color of the highlighted tab. Is this a bug in the API or is there something I'm missing?
Key things to note:
I'm using storyboarding
I have a UITabBarController where each tab has an embedded UINavigationController (pretty standard setup)
I've tried embedding the first code snippet into both the UINavigationController subclass as well as the root UIViewController subclass that is inside the UINavigationController. No luck there either.