XLOG

[SwiftUI] Button 의 highlighted 감지하기 본문

Swift/SwiftUI

[SwiftUI] Button 의 highlighted 감지하기

X_PROFIT 2023. 12. 1. 23:19

기존 UIKit의 UIButton 의 경우 setTitleColor 를 통해 highlighted에 따라 색상을 변경할 수 있었다. 하지만 SwiftUI 에선 자동으로 Button에서 처리가 되기도 하지만 Custom Label의 경우는 그것이 쉽지 않다.

방법은 간단하다. ButtonStyle 을 구현하는 것이다.

ButtonStyle 은 Protocol 로 Makebody 함수를 통해서 View 를 return 한다.

또한 makebody에 configuration 에는 label, isPressed 가 있다. 여기서 isPressed 가 바로 highlighted 와 비슷하다고 보면 된다.

구현은 간단하다.

struct CustomButtonStyle: ButtonStyle {
	func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .foregroundStyle(configuration.isPressed ? .red : .blue)
            .scaleEffect(configuration.isPressed ? 0.8 : 1)
    }
}

Button(action: {
    print("Something")
}, label: {
        RoundedRectangle(cornerRadius: 8)
})
.buttonStyle(CustomButtonStyle())
.frame(width: 200, height: 50)