Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Done Button Colour on SFSafariViewController

I am using the SFSafariViewController to access a website called from a UITableViewController. Because my app has a very light feel attached to it, I have added the following line of code in the AppDelegate:

self.window.tintColor = [UIColor whiteColor];

When running the SFSafariViewController, I get the following:

enter image description here

Is there anyway I can change the colour of the Done button to Blue (as per default)?

I've tried the following when calling the SFSafariViewController but to no effect:

        [self presentViewController:safariVC animated:YES completion:^{
            safariVC.navigationController.navigationItem.rightBarButtonItem.tintColor = [UIColor blueColor];


        [self presentViewController:safariVC animated:YES completion:^{
            safariVC.navigationController.navigationBar.tintColor = [UIColor blueColor];
        }];

Neither of those work.

I could of course leave the app as default and take out the white setting from the AppDelegate, but I want this approach within the app because Blue just stands out too much with custom themes.

Any guidance on this would be really appreciated.

like image 795
amitsbajaj Avatar asked Mar 15 '23 07:03

amitsbajaj


2 Answers

You can change bar colours globally using appearance proxy:

try

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
[[UIBarButtonItem appearance] setTintColor:[UIColor blueColor]];

else try

  [self presentViewController:safariVC animated:YES completion:^{

         [safariVC.navigationBar setTintColor:[UIColor blueColor]];
    }];

else try

in AppDelegate.m in the function:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

I've entered the following code:

//SFSafariViewController
[[UINavigationBar appearanceWhenContainedIn:[SFSafariViewController class], nil] setBarTintColor:[UIColor blueColor]];
[[UINavigationBar appearanceWhenContainedIn:[SFSafariViewController class], nil] setTintColor:[UIColor blueColor]];

or add in your ViewDidLoad

[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]]; 

Swift

UINavigationBar.appearance().tintColor = UIColor.blueColor()
UIBarButtonItem.appearance().tintColor = UIColor.blueColor()

else try this

self.presentViewController(safariVC, animated: true, completion: {() -> Void in
safariVC.navigationBar.tintColor = UIColor.blueColor()
})

or do like

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

     UINavigationBar.appearanceWhenContainedIn(SFSafariViewController.self, nil).barTintColor = UIColor.blueColor()
UINavigationBar.appearanceWhenContainedIn(SFSafariViewController.self, nil).tintColor = UIColor.blueColor()
}

or finally try this

  self.navigationController.navigationBar.tintColor = UIColor.whiteColor()
like image 76
Anbu.Karthik Avatar answered Apr 02 '23 11:04

Anbu.Karthik


Try setPreferredControlTintColor to set tint color of Done button

like image 22
Chuong Tran Avatar answered Apr 02 '23 10:04

Chuong Tran