์ƒˆ์†Œ์‹

๐Ÿ“ฑ iOS/-- UIKit

[IOS] X Code์—์„œ์˜ UI ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•, @IBOutlet ๊ณผ @IBAction , ์ปจํŠธ๋กค ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜

  • -

 

* Xcode์—์„œ์˜ UI ๊ตฌ์„ฑ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

1. xib File

xibํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ๋‹จ์ผํŒŒํ˜„์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์Šคํ† ๋ฆฌ๋ณด๋“œ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ด์ „ ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์ด์ง€๋งŒ, Xcode ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ๋ฒ„๊ทธ๋‚˜ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์š”์ฆ˜์—๋„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•˜๋‚˜์˜ ํ™”๋ฉด ๋ฐ ํ•˜๋‚˜์˜ UI๋ฅผ xibํ™•์žฅ์ž์˜ ๋‹จ์ผํŒŒ์ผ์— ๊ตฌํ˜„ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ์ฝ”๋“œ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

์žฅ์  : ์—ฌ๋Ÿฌ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…์‹œ์— ์ฝ”๋“œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ํ˜‘์—…์— ์ˆ˜์›”ํ•˜๋ฉฐ, ํŽธ์ง‘ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

๋‹จ์  : ํ™”๋ฉด์˜ ํ๋ฆ„์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

2. Storyboard

Xcode์˜ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ํ™”๋ฉด๊ณผ ์‹คํ–‰ํ๋ฆ„์„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹.

์žฅ์  : Segue๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์˜ ์ „ํ™˜์„ ๋ˆˆ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ํ™•์ธํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์  : ํ™”๋ฉด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ฒŒ ๋˜๋ฉด, ํŽธ์ง‘ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ํŽธ์ง‘์— ๋ณต์žกํ•ด์ง€๊ธฐ ๋œ๋‹ค.

3. SwiftUI

์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฐฉ์‹์ด๋ผ ํ˜„์—…์—์„œ ์ž˜ ์“ฐ์ด์ง€๋Š” ์•Š๊ณ  ์žˆ์œผ๋‚˜, 2 ~ 3๋…„ ๋’ค์—๋Š” ๋‹ค๋ฅผ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์žฅ์  : ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  , UI๋ฅผ ๊ทธ๋ฆฌ๊ธฐ๊ฐ€ ์‰ฝ๋‹ค๊ณ  ํ•œ๋‹ค.

๋‹จ์  : ์ตœ๊ทผ์— ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ถ€์‹คํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

* UI์™€ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Outlet๊ณผ Action

  • @IBOutlet๊ณผ @IBAction์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ UI์™€ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • IB ๋Š” Interface Builder์˜ ์•ฝ์ž์ด๋‹ค.
  • @๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ํ”„๋กœํผํ‹ฐ(๋ณ€์ˆ˜ ํ˜น์€ ๋ฉ”์†Œ๋“œ)์˜ ์„ฑ๊ฒฉ์„ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (์—ฌ๊ธฐ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”์™€ ๊ด€๋ จ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค)

<@IBOutlet >

  • ์ •์˜ : ์ปจํŠธ๋กค๋Ÿฌ์˜ header file์— ์„ ์–ธ๋œ ๊ฐ์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๊ฐ€ ์ธ์‹ํ•˜๋„๋ก ์—ฐ๊ฒฐ ํ•˜๋Š”๊ฒƒ.
  • ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ UI์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • UI์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    @IBOutlet weak var label: UILabel!

<@IBAction>

  • ์ปจํŠธ๋กค์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฆ‰, ๋ฒ„ํŠผ๋“ฑ์ด ํด๋ฆญ๋˜๋Š” '์ด๋ฒคํŠธ' ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ ์–ด๋–ค ๋™์ž‘์„ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
@IBAction func btn(_ sender: Any) {
    }

* ์ปจํŠธ๋กค ์•ก์…˜์˜ ์ข…๋ฅ˜

touchDown : ์ปจํŠธ๋กค์„ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDown

touchDownRepeat : ์ปจํŠธ๋กค์„ ์—ฐ์† ํ„ฐ์น˜ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDownRepeat

touchDragInside : ์ปจํŠธ๋กค ๋ฒ”์œ„ ๋‚ด์—์„œ ํ„ฐ์น˜ํ•œ ์˜์—ญ์„ ๋“œ๋ž˜๊ทธ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDragInside

touchDragOutside : ํ„ฐ์น˜ ์˜์—ญ์ด ์ปจํŠธ๋กค์˜ ๋ฐ”๊นฅ์ชฝ์—์„œ ๋“œ๋ž˜๊ทธ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDragOutside

*touchDragEnter : *ํ„ฐ์น˜ ์˜์—ญ์ด ์ปจํŠธ๋กค์˜ ์ผ์ • ์˜์—ญ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๋‚˜๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋“ค์–ด์™”์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDragEnter

*touchDragExit : *ํ„ฐ์น˜ ์˜์—ญ์ด ์ปจํŠธ๋กค์˜ ์ผ์ • ์˜์—ญ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๋‚˜๊ฐ”์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchDragExit

*touchUpInside : *์ปจํŠธ๋กค ์˜์—ญ ์•ˆ์ชฝ์—์„œ ํ„ฐ์น˜ ํ›„ ๋—์„๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.touchUpInside

*touchUpOutside : *์ปจํŠธ๋กค ์˜์—ญ ์•ˆ์ชฝ์—์„œ ํ„ฐ์น˜ ํ›„ ์ปจํŠธ๋กค ๋ฐ–์—์„œ ๋—์„๋•Œ ์ด๋ฒคํŠธ
UIControl.Event.touchUpOutside

*touchCancel : *ํ„ฐ์น˜๋ฅผ ์ทจ์†Œํ•˜๋Š” ์ด๋ฒคํŠธ (touchUp ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€ ์•Š์Œ)
UIControl.Event.touchCancel

*valueChanged : *ํ„ฐ์น˜๋ฅผ ๋“œ๋ž˜๊ทธ ๋ฐ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์กฐ์ž‘ํ•˜์—ฌ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.valueChanged

*primaryActionTriggered : *๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆด๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ (iOS๋ณด๋‹ค๋Š” tvOS์—์„œ ์‚ฌ์šฉ)
UIControl.Event.primaryActionTriggered

*editingDidBegin : *UITextField์—์„œ ํŽธ์ง‘์ด ์‹œ์ž‘๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.editingDidBegin

*editingChanged : *UITextField์—์„œ ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.editingChanged

*editingDidEnd : *UITextField์—์„œ ์™ธ๋ถ€๊ฐ์ฒด์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ธํ•ด ํŽธ์ง‘์ด ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.editingDidEnd

*editingDidEndOnExit : *UITextField์˜ ํŽธ์ง‘์ƒํƒœ์—์„œ ํ‚ค๋ณด๋“œ์˜ return ํ‚ค๋ฅผ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
UIControl.Event.editingDidEndOnExit

allTouchEvents : ๋ชจ๋“  ํ„ฐ์น˜ ์ด๋ฒคํŠธ
UIControl.Event.allTouchEvents

allEditingEvents : UITextField์—์„œ ํŽธ์ง‘์ž‘์—…์˜ ์ด๋ฒคํŠธ
UIControl.Event.allEditingEvents

*applicationReserved : *๊ฐ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž„์˜๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ ๊ฐ’์˜ ๋ฒ”์œ„
UIControl.Event.applicationReserved

*systemReserved : *ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์•ฝ๋œ ์ด๋ฒคํŠธ ๊ฐ’์˜ ๋ฒ”์œ„
UIControl.Event.systemReserved

*allEvents : *์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ด๋ฒคํŠธ
UIControl.Event.allEvents

* ์ฃผ์˜์ 

  • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•˜๊ณ , ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ UI์™€ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • Outlet์ด๋‚˜ Action์„ ์—ฐ๊ฒฐํ–ˆ๋‹ค๋ฉด, ์‚ญ์ œํ•  ๋•Œ๋Š” Scene์—์„œ๋„ ์‚ญ์ œํ•˜๊ณ , ์ฝ”๋“œ๋‚ด์—์„œ๋„ ์‚ญ์ œํ•ด์•ผํ•œ๋‹ค.

connection Inspector์—์„œ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.