Пользовательский UIBarButtonItem с изображением и tintColor

Моя панель навигации состоит из трех компонентов: кнопки "Назад", плитки и дополнительной пользовательской кнопки.

Моя цель состоит в том, чтобы иметь возможность добавить собственное изображение к этой кнопке, но при этом следовать логике цветового оттенка.

В моем AppDelegate.m метод didFinishLaunchingWithOptions, который я установил:

ViewController *welcomeVC = [[ViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc]
                                                initWithRootViewController:welcomeVC];
navigationController.navigationBar.tintColor = [UIColor orangeColor];
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor orangeColor], NSForegroundColorAttributeName, nil]];

self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];

Тогда в ViewController.m у меня есть:

- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}

- (void)setUpImageBackButton {
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(popCurrentViewController)];
}

-(IBAction)nextButtonTapped:(id)sender {
//create the second view
    SecondViewController *secondController = [[SecondViewController alloc] initWithNibName:nil bundle:NULL];
    secondController.title = @"SecondViewController";
    [self.navigationController pushViewController:secondController animated:YES];
}

-(void)popCurrentViewController {
    [self.navigationController popViewControllerAnimated:YES];
}

И в последнем виде контроллера у меня есть:

- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}

- (void)setUpImageBackButton {
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(popCurrentViewController)];

    UIButton *settingsButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
    [settingsButton setTitle:@"\u2699" forState:(UIControlStateNormal)];
    [settingsButton.titleLabel setFont:[UIFont systemFontOfSize:30]];
    [settingsButton addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:settingsButton];
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor orangeColor];
}

-(IBAction)nextButtonTapped:(id)sender {
    //create the third view
    ThirdViewController *thirdController = [[ThirdViewController alloc] initWithNibName:nil bundle:NULL];
    thirdController.title = @"ThirdViewController";
    [self.navigationController pushViewController:thirdController animated:YES];
}

-(void)popCurrentViewController {
    [self.navigationController popViewControllerAnimated:YES];
}

Мои вопросы:

  1. Можно ли использовать пользовательские изображения для кнопок панели навигации, но при этом иметь эффект tintColor? Если это так, может кто-нибудь опубликовать пример кода, как это сделать.
  2. Почему моя кнопка настроек не подчиняется правилу оттенка, так как она остается белой. Кнопка "Информация" и кнопка "Назад" все оранжевые, как я установил их в вызове AppDelegate.

0 ответов

Другие вопросы по тегам