Как заставить UIView менять цвет при нажатии?

Я хотел бы сделать UIView выделенным после нажатия и вернуться к нормальному цвету после отпускания. Какова наилучшая практика для этого?


person ErikLm    schedule 12.12.2017    source источник
comment
Используйте UIButton.   -  person rmaddy    schedule 12.12.2017


Ответы (2)


Подкласс UIView:

class CustomView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.blue
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        backgroundColor = UIColor.red
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        backgroundColor = UIColor.blue
    }
}

Apple о переопределении touchesBegan и touchesEnded:

При создании собственных подклассов вызывайте super для пересылки любых событий, которые вы не обрабатываете самостоятельно. Если вы переопределяете этот метод без вызова super (распространенный шаблон использования), вы также должны переопределить другие методы для обработки сенсорных событий [т.е. touchesEnded, touchesMoved, touchesCancelled], даже если ваши реализации ничего не делают.

Дальнейшее чтение:

https://developer.apple.com/documentation/uikit/uiview

Правильная практика создания подклассов UIView?

person liquid    schedule 12.12.2017

Очень простой пример — вы можете запустить его на странице Playground:

//: Playground - noun: a place where people can play

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {

    override func viewDidLoad() {
        view.backgroundColor = .red
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.backgroundColor = .green
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.backgroundColor = .red
    }

}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Однако на практике вам понадобится дополнительный код для проверки состояния, обработки touchesCancelled и т. д.

Это просто для того, чтобы вы начали: ознакомьтесь с событиями касания по адресу: https://developer.apple.com/documentation/uikit/uiview

person DonMag    schedule 12.12.2017