В какой-то момент в моем приложении у меня есть выделение UIButton
(например, когда пользователь держит палец на кнопке), и мне нужно изменить цвет фона, когда кнопка подсвечена (так, пока палец пользователя все еще находится на кнопке) ,
Я попробовал следующее:
_button.backgroundColor = [UIColor redColor];
Но это не работает. Цвет остается прежним. Я попробовал тот же кусок кода, когда кнопка не выделена, и она работает нормально. Я также попытался позвонить -setNeedsDisplay
после изменения цвета, это не имело никакого эффекта.
Как заставить кнопку изменить цвет фона?
ios
objective-c
xcode
uibutton
MartinMoizard
источник
источник
Ответы:
Вы можете переопределить
UIButton
«SsetHighlighted
метод.Objective-C
Swift 3.0 и Swift 4.1
источник
backgroundColor = isHighlighted ? .lightGray : .white
Не уверен, что этот вид решает то, что вам нужно, или соответствует вашему общему ландшафту разработки, но в первую очередь я бы попытался изменить цвет фона кнопки в событии touchDown.
Опция 1:
Вам понадобятся два события для захвата, UIControlEventTouchDown будет для, когда пользователь нажимает кнопку. UIControlEventTouchUpInside и UIControlEventTouchUpOutside будут для, когда они отпустят кнопку, чтобы вернуть ее в нормальное состояние
Вариант 2:
Верните изображение, созданное из нужного вам цвета. Это также может быть категория.
а затем измените выделенное состояние кнопки:
источник
layer.cornerRadius
опцию №2 и переключаетесьclipsToBounds
на нее, вам нужно обязательно установить значение true, чтобы углы изображения также были закруглены.Нет необходимости переопределять
highlighted
как вычисляемое свойство. Вы можете использовать наблюдатель свойства, чтобы вызвать изменение цвета фона:Swift 4
источник
File>New>File>Cocoa Touch Class
и установив его вsubclass of UIButton
. Назовите файл для exCustomButton
, который станет и именем файла, и именем класса. Внутри этого файла поместитеoverride var highlighted
код, показанный выше. Последний шаг, установите UIButton в Интерфейсном Разработчике, чтобы использовать этотCustomButton
подкласс, перейдя на страницу свойств, где он говорит «Пользовательский класс» и имеет раскрывающийся список. Он будет говорить «UIButton» серыми буквами. В раскрывающемся списке должна отображаться CustomButton. Выберите это, и кнопка теперь находится в подклассе.isHighlighted = false
где-то в начале (например, при инициализации).Удобное универсальное расширение в Swift:
Swift 3.0
источник
В Swift вы можете переопределить метод доступа выделенного (или выбранного) свойства вместо переопределения метода setHighlighted
источник
highlighted
это собственность на UIButton. Ответ в том, что это свойство UIControl, от которого наследуется UIButton.Переопределить выделенную переменную. Добавление
@IBInspectable
заставляет вас редактировать подсвеченный backgroundColor в раскадровке, что тоже изящно.источник
более компактное решение (на основе ответа @ aleksejs-mjaliks ):
Свифт 3/4 + :
Свифт 2:
Если вы не хотите переопределять, это обновленная версия ответа @ timur-bernikowich ( Swift 4.2 ):
источник
Расширение UIButton с синтаксисом Swift 3+ :
Используйте это как:
Оригинальный ответ: https://stackoverflow.com/a/30604658/3659227
источник
Вот подход в Swift, использующий расширение UIButton для добавления IBInspectable, называемого selectedBackgroundColor. Подобно подклассу, не требуя подкласса.
Надеюсь, это поможет.
источник
Вы можете использовать эту категорию, которая добавляет метод setBackgroundColor: forState:
https://github.com/damienromito/UIButton-setBackgroundColor-forState-
источник
Мое лучшее решение для Swift 3+ без подклассов.
С этим расширением легко управлять цветами для разных состояний, и оно автоматически затухает в обычном цвете, если выделенный цвет не предусмотрен.
источник
ОБНОВИТЬ:
Используйте библиотеку UIButtonBackgroundColor Swift.
OLD:
Используйте помощники ниже, чтобы создать изображение размером 1 px x 1 px с цветом заливки в оттенках серого:
или цвет заливки RGB:
Затем используйте это,
image
чтобы установить фоновое изображение кнопки:Помощники
Примечание:
ACU
это префикс класса моей статической библиотеки Cocoa Touch под названием Acani Utilities, где AC для Acani, а U для Utilities.источник
Попробуй это !!!!
Для события TouchedDown установите один цвет, а для TouchUpInside - другой.
источник
- (IBAction)onButtonTouchDragOutside:(UIButton *)sender {
чтобы цвет не оставался включенным, когда пользователь случайно тянет палец с кнопки.Подкласс UIButton и добавьте проверяемые свойства для удобного использования (написано в Swift 3.0):
источник
Вы можете создать подкласс UIButton и сделать хороший forState.
colourButton.h
colourButton.m
Ноты (это пример, я знаю, что есть проблемы, а вот некоторые)
Я использовал NSMutableDictionay для хранения UIColor для каждого государства, я должен сделать неприятное преобразование текста для ключа, поскольку UIControlState не является хорошим прямым Int. Если это где вы можете начать массив с таким количеством объектов и использовать состояние в качестве индекса.
Из-за этого у многих возникают проблемы, например, с выбранной и отключенной кнопкой, требуется дополнительная логика.
Другая проблема, если вы пытаетесь установить несколько цветов одновременно, я не пробовал с кнопкой, но если вы можете сделать это, она может не работать
Я предположил, что это StoryBoard, нет init, initWithFrame, поэтому добавьте их, если они вам нужны.
источник
Swift 5 , спасибо @Maverick
источник
подробности
Решение
использование
источник
Попробуйте это, если у вас есть изображение:
или посмотрите,
showsTouchWhenHighlighted
достаточно ли это для вас.источник
Я открыл открытый подкласс UIButton, STAButton , чтобы заполнить эту пробел в функциональности. Доступно по лицензии MIT. Работает для iOS 7+ (я не тестировал со старыми версиями iOS).
источник
Чтобы решить эту проблему, я создал категорию для обработки состояний
backgroundColor
с помощьюUIButtons
:ButtonBackgroundColor-iOS
Вы можете установить категорию как модуль .
Легко использовать с Objective-C
Еще проще в использовании со Swift :
Я рекомендую вам импортировать пакет с:
Использование use_frameworks! в вашем Podfile облегчает использование ваших стручков со Swift и Objective-C.
ВАЖНЫЙ
Я также написал сообщение в блоге с дополнительной информацией.
источник
источник
Используйте https://github.com/swordray/UIButtonSetBackgroundColorForState
Добавить в Podfile, используя CocoaPods
стриж
Objective-C
источник
Попробуй
tintColor
:источник
NSLog(@"%@", _button);
?UIButtonTypeCustom
.Вот код в Swift для выбора состояния кнопки:
Пример:
источник
Оставьте его, и все
готово : * в IB можно установить proerty, и если не установлен выделенный фон, фон не изменится при нажатии
источник
Ниже
UIIImage
расширение генерирует изображение объекта с указанным параметром цвета.Пример использования кнопки может быть применен для объекта кнопки как:
источник
просто то, что использовать это расширение UIButton ТОЛЬКО
и использовать это
источник
если вы не хотите переопределять, просто установите два действия touchDown touchUpInside
источник
Свифт 3:
источник
в Свифте 5
Для тех, кто не хочет использовать цветной фон, чтобы побить выбранное состояние
Просто вы можете справиться с этой проблемой с помощью оператора #Selector & if, чтобы легко и просто изменять цвета кнопок UIB для каждого состояния.
Например:
источник