Пользовательский тип UIButton с изображением только выделяет изображение при касании [дубликат]

В java 8 функциональный интерфейс представляет собой интерфейс, имеющий только один абстрактный метод, называемый функциональным методом, к которому сопоставляются параметр и тип возвращаемого выражения lambda.

java.util.function содержит функциональные интерфейсы общего назначения, используемые JDK, а также для конечных пользователей. Хотя они не являются полным набором функциональных интерфейсов, к которым могут быть применены лямбда-выражения, но они обеспечивают достаточно для удовлетворения общих требований.

Существует множество таких интерфейсов, которые заслуживают того, чтобы их можно было назвать функциональным интерфейсом, но пакет java.util.function уже предоставляет функциональные интерфейсы для наших почти всех

Например, посмотрите на следующий код.

public interface Comparable<T> {
   public int compareTo(T o);
}

@FunctionalInterface
public interface ToIntFunction<T> {
   int applyAsInt(T value);
}

public static void main(String[] args){
   ToIntFunction<String> f = str -> Integer.parseInt(str);
   Comparable<String> c = str -> Integer.parseInt(str);
}

Comparable также может взять объект и получить некоторое значение типа int, но есть более общий выделенный интерфейс ToIntFunction для выполнения этой задачи. Нет такого жесткого правила, что все заслуживающие интерфейсы должны быть аннотированы с помощью @FunctionalInterface, но чтобы получить преимущество лямбда-функции, интерфейс должен выполнять все критерии, определенные FunctionalInterface.

37
задан NewXcoder 24 October 2012 в 02:46
поделиться

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)];
53
ответ дан Ariel 28 August 2018 в 07:19
поделиться

Поскольку @null указывает на то, что самый простой способ сделать это - установить тип кнопки в Interface Builder (или в коде) на «Custom».

Если вам нужно воспроизвести это поведение со стандартной кнопкой, переопределите метод setHighlighted, чтобы не изменять альфа-канал titleLabel:

- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    self.titleLabel.alpha = 1.0;
}
23
ответ дан brandonscript 28 August 2018 в 07:19
поделиться

Есть несколько комментариев, указывающих на это, но для того, чтобы иметь это как реальный ответ:

Установите тип кнопки Custom в раскадровке или в коде: [UIButton buttonWithType:UIButtonTypeCustom];

2
ответ дан Eric 28 August 2018 в 07:19
поделиться

Для чего-то более многоразового использования вы можете это рассмотреть, так как он не нарушает принцип 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)]];
1
ответ дан Oliver Atkinson 28 August 2018 в 07:19
поделиться

0 строк кода:

Используя Interface Builder и .XIB или .storyboard, выберите свой UIButton в IB: Вид> Утилиты> Показать атрибут инспекторов .

Выберите State Config (по умолчанию) для одного из выделенных, выбранных или отключенных и измените атрибут Text Color .

Interface Builder solution [/g4]

20
ответ дан SwiftArchitect 28 August 2018 в 07:19
поделиться

Я думаю, майюр прав. Вы пробовали другой цвет вместо «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];
}
0
ответ дан Thomas Johannesmeyer 28 August 2018 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: