Изменение цвета названия заголовка UIButton - Как отключить его?
Я создал кнопку. Цвет заголовка по умолчанию черный. Но когда я нажимаю на него, цвет меняется немного синим и никогда не меняется снова, как это происходит? Может ли кто-нибудь сказать мне, почему? И я хочу, чтобы название кнопки оставалось черным все время. Как я могу это сделать? Я пробовал
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected];
Но эффекта нет. Когда я добавляю это в свой код, кажется, что заголовок кнопки всегда синий.
Введите код следующим образом.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(20, 360, 280, 44)];
[button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f];
button.titleLabel.textColor = [UIColor darkTextColor];
button.titleLabel.shadowColor = [UIColor blackColor];
button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth;
[self.view addSubview:button];
[button release];
Спасибо всем. Я перепутал проблему. Я думаю, что основная причина
button.titleLabel.textColor = [UIColor darkTextColor];
Когда я удалю это и использую
button setTitleColor:(UIColor) forState:(UIControlState);
Проблема решена!
Ответы
Ответ 1
вы можете использовать
[UIButton setTitleColor: forState:]
для всех состояний, тогда цвет заголовка останется таким же для всех состояний.
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
Примечание. Чтобы избежать ввода типа или вставки выше кода три раза, вы можете использовать следующий код, предложенный Уилом,
[button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)];
Ответ 2
Как указывает @null, самый простой способ сделать это - установить тип кнопки в Interface Builder (или в коде) на "Custom".
Если вам нужно повторить это поведение с помощью стандартной кнопки, переопределите метод setHighlighted
, чтобы не изменять альфа-канал titleLabel:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
self.titleLabel.alpha = 1.0;
}
Ответ 3
0 строк кода:
Используя Interface Builder и .XIB
или .storyboard
, выберите UIButton
в IB:
Просмотp > Утилиты > Инспектор показа атрибутов.
Выберите "Конфигурация состояния" (по умолчанию) для одного из выделенных, выбранных или отключено и измените атрибут "Цвет текста".
![Interface Builder solution]()
Ответ 4
Есть несколько комментариев, указывающих на это, но для того, чтобы иметь его в качестве фактического ответа:
Установите тип кнопки Custom
в раскадровке или в коде:
[UIButton buttonWithType:UIButtonTypeCustom];
Ответ 5
Для чего-то более многоразового использования вы можете подумать об этом, так как он не нарушает принцип DRY. Добавьте это как категорию в UIButton.
- (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states;
{
[states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) {
[self setTitleColor:color forState:[state integerValue]];
}];
}
пример использования для вашего случая:
[self oka_setTitleColor:[UIColor darkTextColor]
forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]];
Ответ 6
Я думаю, майюр прав. Вы пробовали другой цвет вместо "darkTextColor"? Насколько я знаю "darkTextColor" - это системный цвет, который используется для записи текста на светлых фонах. Возможно, попробуйте blackColor, если предложение mayuurs не работает.
Изменить: попробуйте добавить: [sender setHighlighted:NO];
в свой IBAction, который вызывается при нажатии кнопки. Решает ли он это? Я предлагаю это, потому что из [button release];
я предполагаю, что вы все еще запускаете старую версию SDK iOs, и там вы не можете отключить подсветку кнопки элегантным способом, кроме этого.
Edit2: Вы создаете кнопку программно, но я не вижу, чтобы вы соединяли ее с IBAction.
Добавьте это ниже [[UIButton alloc] init];
[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];
Затем создайте метод IBAction следующим образом:
- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */
- (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */
[sender setHighlighted:NO];
}