Swift: изменение цвета кнопки при нажатии

69
5

Я новичок в Swift, и я пытаюсь изменить цвет кнопки при нажатии. Когда кнопка нажата, она должна меняться, и когда она отпускается, она должна вернуться к исходному цвету кнопки.

Примером этого является калькулятор. Когда вы нажимаете кнопку, она изменяется от светло-серого до темно-серого, и когда пользователь удаляет свой палец с кнопки, он возвращается к исходному светло-серому цвету. Как мне это сделать?

Пока что у меня есть это.

@IBAction func changeButtonColourOnTouch(sender: UIButton) {

zeroButton.backgroundColor = UIColor.blueColor()

}

Приведенный выше код меняет цвет кнопки на синий, но остается синим.

спросил(а) 2020-04-04T00:18:59+03:00 5 месяцев, 4 недели назад
1
Решение
106

Проблема заключается в том, что после отпускания кнопки вы должны вернуть цвет в исходное состояние.

Вы можете напрямую ссылаться на раскадровку, в действие TouchUpInside (выпуск) и TouchDown (нажмите), чтобы изменить цвет кнопки на правильное состояние в каждом событии.

enter image description here

Или вы можете добавить Target в кнопку по коду, ссылаясь на функции, как показывает следующий ниже код.

    zeroButton.addTarget(self, action: Selector("holdRelease:"), forControlEvents: UIControlEvents.TouchUpInside);
zeroButton.addTarget(self, action: Selector("HoldDown:"), forControlEvents: UIControlEvents.TouchDown)

//target functions
func HoldDown(sender:UIButton)
{
zeroButton.backgroundColor = UIColor.blueColor()
}

func holdRelease(sender:UIButton)
{
zeroButton.backgroundColor = UIColor.whiteColor()
}

Код, адаптированный по настоящему в ссылке UIButton с действием удержания и выделением

ответил(а) 2020-04-04T00:32:50.495628+03:00 5 месяцев, 4 недели назад
57

вы также можете использовать жест нажатия и изменить цвет кнопки, когда пользователь нажимает на кнопку

вы можете увидеть документацию на Apple относительно UIGestureRecognizer здесь

это немного продвинуто, но вы многое узнаете от него.

ответил(а) 2020-04-04T00:18:59+03:00 5 месяцев, 4 недели назад
58

Вы также можете использовать setbackgroundImageForState для определения цветного изображения в качестве фона кнопки для всех UIControlState вас UIControlState, например, Normal, Highlighted, Disabled, Selected.

let cx = UIGraphicsGetCurrentContext()
let color = UIColor.redColor()
let state = UIControlState.Selected

UIGraphicsBeginImageContext(CGSize(width:1, height:1))
CGContextSetFillColorWithColor(cx, color.CGColor)
CGContextFillRect(cx, CGRect(x:0, y:0, width:1, height:1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

self.zeroButton.setBackgroundImage(colorImage, forState: state)

Теперь цвет меняется автоматически, и вам не нужно обращаться с ним вручную.

ответил(а) 2020-04-04T00:18:59+03:00 5 месяцев, 4 недели назад
41

Если вы хотите, чтобы для программно определенной кнопки просто объявляйте кнопку системы типов во время ее инициализации:

 let button = UIButton(type: .system)

ответил(а) 2020-04-04T00:18:59+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема