Вопрос:
Я новичок в Swift, и я пытаюсь изменить цвет кнопки при нажатии. Когда кнопка нажата, она должна меняться, и когда она отпускается, она должна вернуться к исходному цвету кнопки.
Примером этого является калькулятор. Когда вы нажимаете кнопку, она изменяется от светло-серого до темно-серого, и когда пользователь удаляет свой палец с кнопки, он возвращается к исходному светло-серому цвету. Как мне это сделать?
Пока что у меня есть это.
@IBAction func changeButtonColourOnTouch(sender: UIButton) { zeroButton.backgroundColor = UIColor.blueColor() }
Приведенный выше код меняет цвет кнопки на синий, но остается синим.
Лучший ответ:
Проблема заключается в том, что после отпускания кнопки вы должны вернуть цвет в исходное состояние.
Вы можете напрямую ссылаться на раскадровку, в действие TouchUpInside (выпуск) и TouchDown (нажмите), чтобы изменить цвет кнопки на правильное состояние в каждом событии.
Или вы можете добавить 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 с действием удержания и выделением
Ответ №1
вы также можете использовать жест нажатия и изменить цвет кнопки, когда пользователь нажимает на кнопку
вы можете увидеть документацию на Apple относительно UIGestureRecognizer здесь
это немного продвинуто, но вы многое узнаете от него.
Ответ №2
Вы также можете использовать 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)
Теперь цвет меняется автоматически, и вам не нужно обращаться с ним вручную.
Ответ №3
Если вы хотите, чтобы для программно определенной кнопки просто объявляйте кнопку системы типов во время ее инициализации:
let button = UIButton(type: .system)