Подтвердить что ты не робот

UIBarButtonItem с цветом?

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

4b9b3361

Ответ 1

Если кто-то ищет код, чтобы точно дублировать простой 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

Ответ 2

Почему не просто:

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

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

Ответ 8

Если его 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];
        }
    }   

Ответ 9

Если вы используете IB (Interface Builder), перетащите UIView из библиотеки на UIToolBar, и он сгенерирует UIBarButtonItem с настраиваемым представлением. Затем вы можете добавить любые другие элементы управления, которые вы хотите использовать, например. UIButton, UILabel, UIActivityIndicatorView.

Ответ 10

Я хотел добавить что-то к выделенному решению. Если вы выполните это подклассирование, он не будет выполнять разбитые на раскадровные последовательности и селектора, назначенные для 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;

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

Ответ 11

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

- (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.