Изменение цвета заголовка кнопки UIB на выделении - как его отключить?
Я создал кнопку. Цвет заголовка по умолчанию черный. Но когда я нажимаю на него, цвет меняется на синий и никогда не меняется снова, как это происходит? Кто-нибудь может сказать мне, почему? И я хочу, чтобы заголовок кнопки оставался черным все время. Как я могу это сделать? я пытался
[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);
Проблема решена!
6 ответов
Ты можешь использовать
[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)];
Как указывает @null, на сегодняшний день самый простой способ сделать это - установить тип кнопки в Интерфейсном Разработчике (или в коде) на "Пользовательский".
Если вам нужно повторить это поведение стандартной кнопкой, переопределите setHighlighted
метод, чтобы запретить настройку альфа-канала titleLabel:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
self.titleLabel.alpha = 1.0;
}
0 строк кода:
Используя Интерфейсный Разработчик и любой .XIB
или же .storyboard
выберите свой UIButton
в IB:
Вид> Утилиты> Показать атрибуты инспектора.
Выберите " Конфигурация состояния" (по умолчанию): " Выделено", " Выбрано" или " Отключено" и измените атрибут " Цвет текста".
Есть несколько комментариев, указывающих на это, но для того, чтобы это было актуальным ответом:
Установите тип кнопки на Custom
в вашей раскадровке или в коде:[UIButton buttonWithType:UIButtonTypeCustom];
Будьте осторожны, система проигнорирует setTitleColor(_:for:), если кнопка не является настраиваемой.
Для чего-то более пригодного для повторного использования вы можете рассмотреть это, поскольку оно не нарушает принцип СУХОЙ. Добавьте это как категорию на 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)]];
Вы должны инициализировать свою кнопку с помощью
UIButtonTypeCustom
вместо
UIButtonTypeRoundedRect
Я думаю, что Mayuur прав. Вы пробовали другой цвет вместо "darkTextColor"? Насколько я знаю, "darkTextColor" - это системный цвет, который используется для написания текста на светлом фоне. Возможно, попробуйте blackColor, если предложение mayuurs не работает.
Изменить: Попробуйте добавить: [sender setHighlighted:NO];
в ваш IBAction, который вызывается при нажатии кнопки. Это решает это? Я предлагаю это, потому что из [button release];
Я предполагаю, что вы все еще используете старую версию iOs SDK, и там у вас нет возможности элегантно отключить выделение кнопки, кроме этой.
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];
}