πŸ‘©πŸ»‍πŸ’»/iOS

UIButton, UISlider, UILabelμ΄λž€?

reujusong 2020. 7. 7. 15:06
λ³Έ κ²Œμ‹œκΈ€μ€ edwith λΆ€μŠ€νŠΈμ½”μŠ€ iOS ν”„λ‘œκ·Έλž˜λ° κ°•μ˜λ₯Ό λ“£κ³  μž‘μ„±ν•œ κ²Œμ‹œκΈ€ μž…λ‹ˆλ‹€.

 

UIButton, UISlider, UILabel

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 화면을 κ΅¬ν˜„ν•  λ•Œ 자주 μ‚¬μš©ν•˜λŠ” UIμš”μ†Œλ“€μ΄λ‹€.

 


1. UIButton

μ‚¬μš©μžμ˜ μƒν˜Έμž‘μš©(ν„°μΉ˜/νƒ­ λ“±μ˜ 이벀트)에 λ°˜μ‘ν•΄ 미리 μ§€μ •λœ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 컨트둀 μš”μ†Œ

 

 

λ²„νŠΌ μƒμ„±μ˜ 3단계

  1. λ²„νŠΌμ„ μƒμ„±ν•˜κ³  λ²„νŠΌμ˜ μœ ν˜•μ„ 선택
  2. λ²„νŠΌμ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ 문자(타이틀)을 μž…λ ₯ν•˜κ±°λ‚˜, 이미지λ₯Ό μ„€μ •ν•œ λ’€ 크기λ₯Ό μ‘°μ •
  3. λ²„νŠΌμ— νŠΉμ • μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ μž‘λ™ν•  ν•˜λ‚˜ μ΄μƒμ˜ λ©”μ„œλ“œλ₯Ό μ—°κ²°

 

λ²„νŠΌκ³Ό λ©”μ„œλ“œ μ—°κ²°ν•˜λŠ” 방법

 

  1. addTarget(_:action:for:) λ©”μ„œλ“œ μ‚¬μš©
  2. μΈν„°νŽ˜μ΄μŠ€ λΉŒλ”μ—μ„œ μ—°κ²° (@IBAction)

 

μ΄λ•Œ λ²„νŠΌκ³Ό μ—°κ²°λ˜λŠ” λ©”μ„œλ“œ ν˜•μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€.

 

func doSomething() func doSomething(sender: UIButton) 
func doSomething(sender: UIButton, forEvent event: UIEvent)

 

λ²„νŠΌμ˜ μƒνƒœ: default, highlighted, focused, selected, disabled

 

λ²„νŠΌμ˜ μƒνƒœλŠ” μ‘°ν•©λœ μƒνƒœμΌ 수 μžˆλ‹€. 예) [default + highlighted], [selected + disabled] λ“±λ“±

λ²„νŠΌ 생성 μ‹œ κΈ°λ³Έ μƒνƒœ 값은 default이며, μ‚¬μš©μžκ°€ λ²„νŠΌκ³Ό μƒν˜Έμž‘μš©μ„ ν•˜λ©΄ μƒνƒœ 값이 λ³€ν•˜κ²Œ λœλ‹€.

그리고, ν”„λ‘œκ·Έλž˜λ° 방식 ν˜Ήμ€ μΈν„°νŽ˜μ΄μŠ€ λΉŒλ”λ₯Ό μ΄μš©ν•΄ λ²„νŠΌμ˜ 각 μƒνƒœμ— λŒ€ν•œ 속성을 λ³„λ„λ‘œ μ§€μ •ν•  수 μžˆλ‹€. λ§Œμ•½ λ³„λ„λ‘œ 속성을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ UIButton ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Έ λ™μž‘μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€.

예) disabled λ²„νŠΌμ€ 일반적으둜 흐리게 ν‘œμ‹œλ˜λ©° μ‚¬μš©μžκ°€ νƒ­ 해도 highlighted λ˜μ§€ μ•ŠλŠ”λ‹€.

 

λ²„νŠΌμ˜ ν”„λ‘œνΌν‹° 값을 μ„€μ •ν•˜λŠ” λ°©μ‹μ—λŠ” μ½”λ“œλ₯Ό μ΄μš©ν•˜λŠ” 방법과 μŠ€ν† λ¦¬λ³΄λ“œμ˜ μΈμŠ€νŒ©ν„°λ₯Ό μ΄μš©ν•˜λŠ” 방법이 μžˆλ‹€.

 

enum UIButtonType: λ²„νŠΌμ˜ μœ ν˜•

λ²„νŠΌμ˜ μœ ν˜•μ— 따라 λ²„νŠΌμ˜ 기본적인 μ™Έν˜•κ³Ό λ™μž‘μ΄ 달라진닀. 처음 λ²„νŠΌμ„ 생성할 λ•Œ

 

  1. init(type:) λ©”μ„œλ“œλ₯Ό 이용 ν˜Ήμ€
  2. μΈν„°νŽ˜μ΄μŠ€λΉŒλ”μ˜ “Attribute Inspector”μ—μ„œ λ²„νŠΌ μœ ν˜•μ„ μ§€μ •ν•  수 μžˆλ‹€

μ΄λ•Œ ν•œλ²ˆ μƒμ„±λœ λ²„νŠΌμ˜ μœ ν˜•μ€ 이후 λ³€κ²½ ν•  수 μ—†μœΌλ©°, κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” μœ ν˜•μ€ Customκ³Ό Systemμ΄μ§€λ§Œ ν•„μš”μ— 따라 λ‹€λ₯Έ μœ ν˜•(Detail Disclosure, Info Light, Info Dark, Add Contact)λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

  • var titleLabel: UILabel?: λ²„νŠΌ 타이틀 λ ˆμ΄λΈ”
  • var imageView: UIImageView?: λ²„νŠΌμ˜ 이미지 λ·°
  • var tintColor: UIColor!: λ²„νŠΌ 타이틀과 μ΄λ―Έμ§€μ˜ ν‹΄νŠΈ 컬러

 

λ²„νŠΌμ˜ μ£Όμš” λ©”μ„œλ“œ

// νŠΉμ • μƒνƒœμ˜ λ²„νŠΌμ˜ λ¬Έμžμ—΄ μ„€μ •
func setTitle(String?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ λ²„νŠΌμ˜ λ¬Έμžμ—΄ λ°˜ν™˜
func title(for: UIControlState) -> String?

// νŠΉμ • μƒνƒœμ˜ λ²„νŠΌ 이미지 μ„€μ •
func setImage(UIImage?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ λ²„νŠΌ 이미지 λ°˜ν™˜
func image(for: UIControlState) -> UIImage?

// νŠΉμ • μƒνƒœμ˜ λ°±κ·ΈλΌμš΄λ“œ 이미지 μ„€μ • 
func setBackgroundImage(UIImage?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ λ°±κ·ΈλΌμš΄λ“œ 이미지 λ°˜ν™˜
func backgroundImage(for: UIControlState) -> UIImage?

// νŠΉμ • μƒνƒœμ˜ λ¬Έμžμ—΄ 색상 μ„€μ •
func setTitleColor(UIColor?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ attributed λ¬Έμžμ—΄ μ„€μ •
func setAttributedTitle(NSAttributedString?, for: UIControlState)

 

2. UILabel

ν•œμ€„ λ˜λŠ” μ—¬λŸ¬μ€„μ˜ ν…μŠ€νŠΈλ₯Ό λ³΄μ—¬μ£ΌλŠ” 뷰둜, UIButtonλ“±μ˜ 컨트둀의 λͺ©μ μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

 

λ ˆμ΄λΈ” μƒμ„±μ˜ 3단계

  1. λ ˆμ΄λΈ”μ„ 생성
  2. λ ˆμ΄λΈ”μ΄ ν‘œμ‹œν•  λ¬Έμžμ—΄μ„ 제곡
  3. λ ˆμ΄λΈ”μ˜ λͺ¨μ–‘ 및 νŠΉμ„±μ„ μ„€μ •

 

3. UISlider

μ—°μ†λœ κ°’ μ€‘μ—μ„œ νŠΉμ • 값을 μ„ νƒν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 컨트둀

 

μŠ¬λΌμ΄λ” μƒμ„±μ˜ 3단계

  1. μŠ¬λΌμ΄λ”λ₯Ό μƒμ„±ν•˜κ³ , μŠ¬λΌμ΄λ”κ°€ λ‚˜νƒ€λ‚΄λŠ” κ°’μ˜ λ²”μœ„λ₯Ό μ§€μ •
  2. μ μ ˆν•œ 색상과 이미지λ₯Ό μ΄μš©ν•΄ μŠ¬λΌμ΄λ”μ˜ λͺ¨μ–‘을 ꡬ성
  3. ν•˜λ‚˜ μ΄μƒμ˜ λ©”μ„œλ“œλ₯Ό μŠ¬λΌμ΄λ”μ™€ μ—°κ²°

μ‚¬μš©μž μƒν˜Έμž‘μš©μ— λ°˜μ‘ν•˜κΈ°


μ‚¬μš©μžκ°€ μŠ¬λΌμ΄λ”μ˜ 값을 λ³€κ²½ν•˜λ©΄ μŠ¬λΌμ΄λ”μ— μ—°κ²°λœ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄ μ›ν•˜λŠ” μž‘μ—…μ΄ μ‹€ν–‰
κΈ°λ³Έμ μœΌλ‘œλŠ” μ‚¬μš©μžκ°€ μŠ¬λΌμ΄λ”μ˜ Thumbλ₯Ό μ΄λ™μ‹œν‚€λ©΄ μ—°μ†μ μœΌλ‘œ 이벀트λ₯Ό ν˜ΈμΆœν•˜μ§€λ§Œ, isContinous ν”„λ‘œνΌν‹°κ°’μ„ false둜 μ„€μ •ν•˜λ©΄ μŠ¬λΌμ΄λ”μ˜ Thumbμ—μ„œ 손을 λ–ΌλŠ” λ™μ‹œμ— 이벀트λ₯Ό 호좜

 

μŠ¬λΌμ΄λ”μ™€ λ©”μ„œλ“œ μ—°κ²°ν•˜λŠ” 방법

 

  • addTarget(_:action:for:) λ©”μ„œλ“œ μ‚¬μš©
  • μΈν„°νŽ˜μ΄μŠ€ λΉŒλ”μ—μ„œ μ—°κ²° (@IBAction)

μŠ¬λΌμ΄λ”μ™€ μ—°κ²°ν•˜λŠ” λ©”μ„œλ“œ ν˜•μ‹

μŠ¬λΌμ΄λ”μ˜ 값을 λ³€κ²½ν–ˆμ„ λ•Œ ν•„μš”ν•œ 정보에 따라 μ•„λž˜ μ„Έ κ°€μ§€ 쀑 ν•œ κ°€μ§€λ₯Ό μ„ νƒν•˜μ—¬ μ‚¬μš©

 

func doSomething()
func doSomething(sender: UISlider)
func doSomething(sender: UISlider, forEvent event: UIEvent)

 

μŠ¬λΌμ΄λ” μ£Όμš” ν”„λ‘œνΌν‹°

 

μŠ¬λΌμ΄λ”μ˜ ν”„λ‘œνΌν‹° 값을 μ„€μ •ν•˜λŠ” λ°©μ‹μ—λŠ” ν”„λ‘œκ·Έλž˜λ° 방식과, μŠ€ν† λ¦¬λ³΄λ“œμ˜ μΈμŠ€νŽ™ν„°λ₯Ό μ΄μš©ν•œ 방법이 μžˆλ‹€.

  • var minimumValue: Float, var maximumValue: Float: μŠ¬λΌμ΄λ” μ–‘λλ‹¨μ˜ κ°’
  • var value: Float: μŠ¬λΌμ΄λ”μ˜ ν˜„μž¬ κ°’
  • var isContinuous: Bool: μŠ¬λΌμ΄λ”μ˜ 연속적인 κ°’ 변화에 따라 이벀트 μ—­μ‹œ μ—°μ†μ μœΌλ‘œ ν˜ΈμΆœν•  κ²ƒμΈμ§€μ˜ μ—¬λΆ€
  • var minimumValueImage: UIImage?, var maximumValueImage: UIImage?: μŠ¬λΌμ΄λ” μ–‘λλ‹¨μ˜ 이미지
  • var thumbTintColor: UIColor?: thumb의 ν‹΄νŠΈ 색상
  • var minimumTrackTintColor: UIColor?, var maximumTrackTintColor: UIColor?: thumbλ₯Ό κΈ°μ€€μœΌλ‘œ μ•žμͺ½ νŠΈλž™κ³Ό λ’€μͺ½ νŠΈλž™μ˜ ν‹΄νŠΈ 색상

 

μŠ¬λΌμ΄λ” μ£Όμš” λ©”μ„œλ“œ

 

// μŠ¬λΌμ΄λ”μ˜ ν˜„μž¬ κ°’ μ„€μ •
func setValue(Float, animated: Bool)

// νŠΉμ • μƒνƒœμ˜ minimumTrackImage λ°˜ν™˜
func minimumTrackImage(for: UIControlState) -> UIImage?

// νŠΉμ • μƒνƒœμ˜ minimumTrackImage μ„€μ •
func setMinimumTrackImage(UIImage?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ maximumTrackImage λ°˜ν™˜
func maximumTrackImage(for: UIControlState) -> UIImage?

// νŠΉμ • μƒνƒœμ˜ minimumTrackImage μ„€μ •
func setMaximumTrackImage(UIImage?, for: UIControlState)

// νŠΉμ • μƒνƒœμ˜ thumbImage λ°˜ν™˜
func thumbImage(for: UIControlState) -> UIImage?

//νŠΉμ • μƒνƒœμ˜ thumbImage μ„€μ •
func setThumbImage(UIImage?, for: UIControlState)