UIBarButtonItem с цветом? - PullRequest
       42

UIBarButtonItem с цветом?

49 голосов
/ 20 марта 2009

Возможно ли иметь красный UIBarButtonItem?

Ответы [ 11 ]

62 голосов
/ 13 мая 2011

Если кто-то ищет код для точного дублирования простого UIBarButtonItem:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
[button setTitle:@"Delete" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0f];
[button.layer setCornerRadius:4.0f];
[button.layer setMasksToBounds:YES];
[button.layer setBorderWidth:1.0f];
[button.layer setBorderColor: [[UIColor grayColor] CGColor]];
button.frame=CGRectMake(0.0, 100.0, 60.0, 30.0);
[button addTarget:self action:@selector(batchDelete) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem* deleteItem = [[UIBarButtonItem alloc] initWithCustomView:button];

И delete.png - это:

delete.png

36 голосов
/ 23 июля 2012

Почему бы просто:

[[self editButtonItem] setTintColor:[UIColor redColor]];

(на SDK 4. *, ios 5 и выше)

26 голосов
/ 03 июня 2009

Вы можете создать пользовательский UIButton с желаемым внешним видом и инициализировать UIBarButtonItem с ним как пользовательский вид.

UIButton *button = [UIButton buttonWithType:....];
...(customize your button)...

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
7 голосов
/ 17 октября 2011

Вы можете установить свойство tintColor для UIBarButtonItem в iOS 5. Если вам нужна поддержка iOS 4, ознакомьтесь с этой записью в блоге . Он детализируется с использованием UISegmentedControl, стилизованного под одну кнопку.

3 голосов
/ 03 июня 2009

Использование пользовательского изображения не работает, так как для отображения кнопки используется альфа.

2 голосов
/ 11 октября 2011

Хорошо, на самом деле, на мой взгляд, существует гораздо лучшее решение, которое включает в себя меньше кода и использует нативные элементы управления пользовательского интерфейса.

Хитрость в том, чтобы использовать UISegmentedControl и удалить все сегменты, кроме одного. (Не может быть сделано в IB, должно быть сделано программно).

Как только вы это сделаете, вы устанавливаете цвет оттенка, а затем создаете UIBarButtonItem, передавая ему UISegmentedControl в качестве пользовательского представления.

Этот парень использовал технику, чтобы создать категорию UIBarButtonItem, которая прекрасно работает:

http://fredandrandall.com/blog/2011/03/31/how-to-change-the-color-of-a-uibarbuttonitem/

1 голос
/ 31 мая 2011

Если это UIBarButtonItem элемента UIToolbar

установите это перед вашей реализацией в файле вы хотите этот код

@class UIToolbarTextButton;

Затем измените кнопки панели инструментов следующим образом:

   for (UIView *view in self.navigationController.toolbar.subviews) {
        NSLog(@"%@", [[view class] description]);
        if ([[[view class] description] isEqualToString:@"UIToolbarTextButton"]) {
            [(UIToolbarTextButton *)view setTintColor:yourcolor];
        }
    }   
1 голос
/ 20 марта 2009

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

0 голосов
/ 22 апреля 2016

Если у вас есть настройка UIBarButtonItem в Раскадровке , вы должны установить tintColor в методе viewWillAppear() или viewDidAppear() (поместить его в viewDidLoad () не работа для меня ...):

- (void)viewWillAppear {
    [super viewWillAppear];
    [[self editButtonItem] setTintColor:[UIColor redColor]];
}

Или в Swift:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    editButtonItem.tintColor = UIColor.redColor()
}

Примечание: протестировано на iOS 8/9 .

0 голосов
/ 23 февраля 2012

Я хотел добавить что-то к выделенному решению. Если вы сделаете этот подкласс, он не будет выполнять сегментированные и расщепленные сегменты и селекторы, которые назначены UIBarButtonItem. Кроме того, свойства 'target' и 'action' не установлены в UIBarButtonItem, поэтому вы не можете получить к ним доступ из подкласса и назначить их для UIButton.

Я решил эту проблему, добавив в свой подкласс 2 свойства (используя ARC):

@property (nonatomic, weak) id targetViewController;
@property (nonatomic, strong) NSString *segueIdentifier;

Затем, в инициализации вашего подкласса, добавьте что-то вроде этого к принятому коду ответа:

[button addTarget:self action:@selector(performAction) forControlEvents:UIControlEventTouchUpInside];

и функция:

- (void)performAction {
    if (_targetViewController && _segueIdentifier) {
        [_targetViewController performSegueWithIdentifier:_segueIdentifier sender:self];
    } else {
        NSLog(@"Requires targetViewController and segueIdentifier to be set");
    }
}

наконец, в вашем главном контроллере представления, который содержит все это, в 'viewDidLoad', добавьте это:

_fancyBarButtonItem.segueIdentifier = @"NewTransaction";
_fancyBarButtonItem.targetViewController = self;

Надеюсь, что это поможет кому-то еще сэкономить время, когда они начнут идти по этому пути с раскадровками / iOS5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...