์ด ๊ธ์ iOS 15 ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋ ๊ธ์ ๋๋ค.
UIButton.Configuration์ด๋?
iOS 2.0+ ๋ถํฐ UIButton์ ๋ชจ์์ setTitle(:for:), setImage(:for:) ๊ณผ ๊ฐ์ UIButton์ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํตํด ์ค์ ํ ์ ์์๋ค.
ํ์ง๋ง iOS 15+ ๋ถํฐ๋ UIButton.Configuration์ด ์ถ๊ฐ๋๋ฉด์ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก UIButton์ ๋ชจ์๊ณผ ํ๋์ ์ค์ ํ ์ ์๊ฒ ๋์๋ค. Configuration์ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฉ์๋๋ค๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ ๋ฉ์๋๋ค์ ์์ ๋์ฒดํ ์๋ ์๋ค.
Configuration์ ์ฅ์ ์ ๊ธฐ์กด ๋ฒํผ์ ๋ชจ์๊ณผ ํ๋์ ์์ ํ๊ณ ์ถ์ ๋ ์ฝ๋๋ฅผ ์ผ์ผ์ด ์์ ํ ํ์์์ด ์๋ก์ด Configuration์ ๊ตฌ์ฑํ ๋ค UIButton์ configuration ํ๋กํผํฐ์ ํ ๋นํ๋ฉด ๋๋ค.
UIButton.Configuration ๊ณต์๋ฌธ์
UIButton์ configuration ํ๋กํผํฐ ๊ณต์๋ฌธ์
UIButton.Configuration์ ์ฌ์ฉํด ๋ฒํผ ๊ตฌ์ฑํ๊ธฐ
1. Creating Configuration
iOS 15๋ฒ์ ๋ถํฐ UIButton์ ์ฌ๋ฌ ๋ชจ์์ผ๋ก ์ ๋ฐ์ดํธ๋์๋ค. Configuration์์๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋์ ๊ฐ์ ๋ชจ์์ ์ด๋์ ๋ผ์ด์ ๋ก ์ฌ์ฉํ๋ค.
static func plain() -> UIButton.Configuraton | ํฌ๋ช ํ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๋ฒํผ |
static func gray() -> UIButton.Configuraton | ํ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๋ฒํผ |
static func tinted() -> UIButton.Configuraton | ์ํ๋ ์์ผ๋ก ํฌ๋ช ํ ๋ฐฐ๊ฒฝ์ ์ค์ ํ ์ ์๋ ๋ฒํผ |
static func filled() -> UIButton.Configuraton | ์ํ๋ ์์ผ๋ก ๋ถํฌ๋ช ํ ๋ฐฐ๊ฒฝ์ ์ค์ ํ ์ ์๋ ๋ฒํผ |
static func boderless() -> UIButton.Configuraton | ํ ๋๋ฆฌ๊ฐ ์๋ ๋ชจ์์ ๋ฒํผ. plain()์ผ๋ก ๋์ฒด๋ ์ ์๋ค. |
static func bordered() -> UIButton.Configuraton | ํ ๋๋ฆฌ๊ฐ ์๋ ๋ชจ์์ ๋ฒํผ. gray()๋ก ๋์ฒด๋ ์ ์๋ค. |
static func borderedTinted() -> UIButton.Configuraton | ์์กฐ์ ํ ๋๋ฆฌ๊ฐ ์๋ ๋ฒํผ. tinted()๋ก ๋์ฒด๋ ์ ์๋ค. |
static func borderedProminent() -> UIButton.Configuraton | ๋๋๋ฌ์ง๊ณ ํ ๋๋ฆฌ๊ฐ ์๋ ๋ฒํผ. filled()๋ก ๋์ฒด๋ ์ ์๋ค. |
Configuration์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์์ ๊ฐ์ด ์ด๊ธฐ์ ์ํ๋ก ์์ฑํ ์๋ ์์ง๋ง, ์ด๋ฏธ Configuration์ด ๋ง๋ค์ด์ ธ ์๋ ๋ฒํผ์ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์๋ ์๋ค.
func updated(for button: UIButton) -> UIButton.Configuraton | ์ฃผ์ด์ง ๋ฒํผ์ ๋ํด ์ ๋ฐ์ดํธ๋ Configuration์ ๋ฐํํ๋ค. |
var button = UIButton()
var configuration = UIButton.Configuration.plain()
button.configuration = configuration
๋๋ UIButton ์์ฑ ์ ๋ฐ๋ก Configuration์ ํ ๋นํด ์ค ์๋ ์๋ค.
init( configuration: UIButton.Configuration, primaryAction: UIAction? = nil ) |
configuration : ๋ฒํผ์ configuration primaryAction : primaryActionTriggered ์ ์ด ์ด๋ฒคํธ๋ก ์ํ๋๋ ๋์. addAction(_:for:)์ ํตํด ์ง์ ํ ์๋ ์๋ค. ๋ง์ฝ primaryAction ๋งค๊ฐ๋ณ์๊ฐ title๊ณผ image๋ฅผ ํฌํจํ๋ค๋ฉด, ์ด ๋ฉ์๋๋ ๊ทธ configuration์ ๋ณต์ฌํด ๋ฒํผ ๋ชจ์์ ์ ์ฉํ๋ค. |
2. Configuring titles
iOS 15 ๋ฒ์ ๋ถํฐ๋ title๊ณผ subTitle์ ์ ๊ณตํ๋ค. Title๊ณผ SubTitle์ ์๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ ์ง์ ํด ์ค ์ ์๋ค.
var title: String? { get set } | ์ด ํ๋กํผํฐ๋ attributedTitle ํ๋กํผํฐ์ ๋ฌธ์์ด ๊ฐ๊ณผ ์ผ์นํ๋ค. configurationUpdateHandler ๋๋ updateConfiguration().์ ์ฌ์ฉํด ๋ฒํผ ์ํ์ ๋ฐ๋ผ title์ ๋ณ๊ฒฝํ ์ ์๋ค. |
var subtitle: String? { get set } | ์ด ํ๋กํผํฐ๋ attributedSubtitle ํ๋กํผํฐ์ ๋ฌธ์์ด ๊ฐ๊ณผ ์ผ์นํ๋ค. configurationUpdateHandler ๋๋ updateConfiguration().์ ์ฌ์ฉํด ๋ฒํผ ์ํ์ ๋ฐ๋ผ title์ ๋ณ๊ฒฝํ ์ ์๋ค. |
Title๊ณผ SubTitle์ ์คํ์ผ์ ์ฌ์ฉ์ ์ง์ ํ๋ ค๋ฉด AttributedString ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์๋ ํ๋กํผํฐ์ ํ ๋นํ๋ฉด ๋๋ค.
var attributedTitle: AttributedString? { get set } | configuration์ ์ด ํ๋กํผํฐ์ ๋ฌธ์์ด ๊ฐ์ title๊ณผ ์ผ์น์ํฌ ์ ์๋ค. configurationUpdateHandler ๋๋ updateConfiguration().์ ์ฌ์ฉํด ๋ฒํผ ์ํ์ ๋ฐ๋ผ title์ ๋ณ๊ฒฝํ ์ ์๋ค. |
var attributedSubtitle: AttributedString? { get set } | configuration์ ์ด ํ๋กํผํฐ์ ๋ฌธ์์ด ๊ฐ์ subtitle๊ณผ ์ผ์น์ํฌ ์ ์๋ค. configurationUpdateHandler ๋๋ updateConfiguration().์ ์ฌ์ฉํด ๋ฒํผ ์ํ์ ๋ฐ๋ผ title์ ๋ณ๊ฒฝํ ์ ์๋ค. |
var attributedTitle = AttributedString("ํ์ดํ")
attributedTitle.font = .systemFont(ofSize: 25, weight: .bold)
attributedTitle.foregroundColor = UIColor.black
//๋จ๋ฝ ๊ฐ๊ฒฉ ์กฐ์
let paragraphTitle = NSMutableParagraphStyle()
paragraphTitle.lineSpacing = 0.3 * (attributedTitle.font?.lineHeight ?? 1)
paragraphTitle.lineBreakStrategy = .hangulWordPriority //์ค ๋ฐ๊ฟ ์ ๋ต ์ค์
attributedTitle.paragraphStyle = paragraphTitle
configuration.attributedTitle = attributedTitle
Title๊ณผ SubTitle์ ๊ฐ๊ฒฉ๊ณผ alignment๋ ์๋์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด ์ค์ ํ ์ ์๋ค.
var titlePadding: CGFloat { get set } | Title๊ณผ SubTitle ๊ฐ๊ฒฉ ์กฐ์ ํ๋ ํ๋กํผํฐ |
var titleAlignment: UIButton.Configuration.TitleAlignment { get set } | ๋ฒํผ์ Title๊ณผ SubTitle์ ๋ฐฐ์นํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํผํฐ case automatic, leading, trailing, center |