๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS & Swift

UIButton.Configuration์„ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด์ž

UIButton.Configuration

  • iOS 15.0๋ถ€ํ„ฐ ์ด์šฉ ๊ฐ€๋Šฅ
  • Struct ํƒ€์ž…

 


 

๊ธฐ๋ณธ ์ œ๊ณต Configuration

๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฒ„ํŠผ ์Šคํƒ€์ผ์ด ํƒ€์ž… ๋ฉ”์„œ๋“œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค.

 


 

Configuration ํ™•์žฅ

๋งค๋ฒˆ configuration์„ ๋ฒ„ํŠผ๋งˆ๋‹ค ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒŒ ์ฝ”๋“œ ๋ผ์ธ๋„ ๊ธธ์–ด์ง€๊ณ  ๊ท€์ฐฎ์•˜๋Š”๋ฐ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ๋ง์”€ํ•ด์ฃผ์‹  extension์œผ๋กœ ํ™•์žฅํ•œ๋‹ค๋Š” ๊ด€์ ์ด ์ข‹์•˜๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด์— ๋ฒ„ํŠผ ์Šคํƒ€์ผ์ด ๋ช‡ ๊ฐ€์ง€ ์—†๊ฑฐ๋‚˜ ์ผ์ •ํ•˜๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ธ๋‹ค. (๊ธฐ๋ณธ ์ œ๊ณต ์Šคํƒ€์ผ๊ณผ ๋™์ผํ•œ ์•„์ด๋””์–ด ์ธ ๊ฒƒ ๊ฐ™๋‹ค.)

 


 

์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ

์•„์ง ์‹ค์ œ๋กœ ์ ์šฉํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๋‚ด์— 3๊ฐ€์ง€ ์Šคํƒ€์ผ์˜ ๋ฒ„ํŠผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์— ์—ด๊ฑฐํ˜•(Enum)๊ณผ Configuration ํ™•์žฅ์„ ์ด์šฉํ•˜๋ฉด ํŽธํ•˜๊ฒŒ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์—๋Š” foregroundColor์™€ backgroundColor๋งŒ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •์„ ํ–ˆ์ง€๋งŒ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ์ปค์Šคํ…€์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™๋‹ค.

@available(iOS 15.0, *)
extension UIButton.Configuration {
    
    enum SobokButtonStyle {
        case basic
        case sub
        case disabled
        
        var backgroundColor: UIColor? {
            switch self {
            case .basic:
                return UIColor(red: 24/255, green: 206/255, blue: 198/255, alpha: 1.0)
            case .sub:
                return UIColor(red: 228/255, green: 246/255, blue: 246/255, alpha: 1.0)
            case .disabled:
                return UIColor(red: 227/255, green: 232/255, blue: 235/255, alpha: 1.0)
            }
        }
        
        var foregroundColor: UIColor? {
            switch self {
            case .basic:
                return UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0)
            case .sub:
                return UIColor(red: 0/255, green: 171/255, blue: 182/255, alpha: 1.0)
            case .disabled:
                return UIColor(red: 161/255, green: 169/255, blue: 174/255, alpha: 1.0)
            }
        }
    }
    
    static func sobokStyle(style: SobokButtonStyle) -> UIButton.Configuration {
        var configuration = UIButton.Configuration.filled()
        configuration.title = "ํ™•์ธ"
        configuration.titleAlignment = .center
        configuration.baseForegroundColor = style.foregroundColor
        configuration.baseBackgroundColor = style.backgroundColor
        configuration.background.cornerRadius = 12
        return configuration
    }
}

 


 

์ž์ฃผ ์“ฐ์ด๋Š” ์†์„ฑ

์ด๊ฒƒ์€ ์ข€ ๋” ์จ๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ background.cornerRadius, foregroundColor, backgroundColor ์ •๋„๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ ๊ฐ™๊ณ , ์ด๋ฏธ์ง€๋ฅผ ์„ž์–ด์“ธ ๋•Œ ๋””ํ…Œ์ผํ•˜๊ฒŒ inset ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์ข€ ๋” ํƒ๊ตฌ๊ฐ€ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.