๐Ÿ“–์ดˆ๋ณด Alert View

๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ Alert View๋ฅผ ๋„์šฐ๊ณ  Alert View์— ์žˆ๋Š” ํ…์ŠคํŠธํ•„๋“œ์˜ ๋‚ด์šฉ์œผ๋กœ ๋ ˆ์ด๋ธ”์˜ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š”(choose๋ฒ„ํŠผ์„ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ๋งŒ) ์•ฑ

๋ฒ„ํŠผ์„ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ alert ์ฐฝ์ด ๋„์–ด์ง€๋ฏ€๋กœ ๋ฒ„ํŠผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ๋ฒ„ํŠผ์˜ ํ„ฐ์น˜ ์‹œ ๋™์ž‘ํ•˜๋Š” @IBAction ํ•จ์ˆ˜ ์•ˆ์— ๊ตฌํ˜„ ๐Ÿ”–Alert ์Šคํƒ€์ผ : alert

๐Ÿ”–๋ฒ„ํŠผ ์ข…๋ฅ˜ default(choose) : ํ…์ŠคํŠธํ•„๋“œ์˜ ๋‚ด์šฉ์œผ๋กœ ๋ ˆ์ด๋ธ”์˜ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ cancel(cancel) : ํ…์ŠคํŠธํ•„๋“œ์˜ ๋‚ด์šฉ์œผ๋กœ ๋ ˆ์ด๋ธ”์˜ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์ทจ์†Œ

0. Alert ๋งŒ๋“ค๊ธฐ

์™•์ดˆ๋ณด Alert

๐Ÿ“–์™•์ดˆ๋ณด Alert View

๋ฒ„ํŠผ์„ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ Alert View๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์•ฑ

๐Ÿ”–Alert ์Šคํƒ€์ผ : alert

1. button ๋งŒ๋“ค๊ธฐ & @IBAction ์—ฐ๊ฒฐ

์ด๊ฑด ์‰ฝ์ง€? ํ•  ์ˆ˜ ์žˆ์ง€? ๋ฒ„ํŠผ ํ„ฐ์น˜ ์‹œ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ @IBAction ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์ž‘์„ฑ๋ ๊ฑฐ์•ผ

2. UIAlertController ์ƒ์„ฑ

let alert = UIAlertController(title: "์ด๊ฑด ๋ฌด์Šจ ์ฐฝ์ผ๊นŒ์šฉ?", message: "Alert ์ฐฝ ์ž…๋‹ˆ๋‹น", preferredStyle: .alert)

๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด?

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

but, preferredStyle์ด ์ฝ๊ธฐ ์ „์šฉ์ด๋ฏ€๋กœ ํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ โ†’ default ๊ฐ’์œผ๋กœ actionSheet ์Šคํƒ€์ผ๋กœ ์ ์šฉ

  • ์ œ๋ชฉ, ๋ฉ”์„ธ์ง€, alert ์œ ํ˜•์„ ์„ค์ •

3. Action Button ๋งŒ๋“ค๊ธฐ

let defaultAction = UIAlertAction(title: "ํ™•์ธ", style: .default) { action in
    //action
}

UIAlertAction

๋„ต? ๊ฐ‘์ž๊ธฐ ํด๋กœ์ ธ ๋ฌธ์ด์šฉ??? UIAlertAction์˜ ์›ํ˜•์„ ๋ณด์ž ํ•ธ๋“ค๋Ÿฌ(handler)๊ฐ€ ์žˆ๋‹ค!! Alert View๊ฐ€ ํ™”๋ฉด์— ๋œจ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์‹คํ–‰ํ•ด์•ผ ํ•  ํ–‰๋™์ด ์žˆ์„ ๊ฒƒ โ†’ ๊ณ ๊ฒƒ์„ ์„ค์ •ํ•ด์ค˜์•ผ ํ•จ
์•„๋ฌด ํ–‰๋™๋„ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋ฉด ํด๋กœ์ ธ ์•ˆ์— ์•„๋ฌด ๊ฒƒ๋„ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋จ (์•„๋‹ˆ๋ฉด ํ•ธ๋“ค๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— nil ์ง€์ •)

  • Action Button์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋งŒํผ Action Button์„ ๋งŒ๋“ฆ โญ๏ธcancel ๋ฒ„ํŠผ์€ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

4. ๋งŒ๋“ค์–ด์ค€ Alert ํ‹€์— Action Button ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ

alert.addAction(defaultAction)
  • alert : ์œ„์—์„œ ๋งŒ๋“ค์–ด ์ค€ UIAlertController ๊ฐ์ฒด defaultAction : ์œ„์—์„œ ๋งŒ๋“ค์–ด ์ค€ UIAlertAction ๊ฐ์ฒด โ†’ ์ด ๋‘˜์„ ์—ฐ๊ฒฐํ•จ ^ใ…ก^
  • ๋งŒ๋“  Action Button ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋‹ค ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ์ถ”๊ฐ€๋จ โญ๏ธ์ด ๋•Œ, alert์— ์ถ”๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋จ(alert : ์™ผ์ชฝ๋ถ€ํ„ฐ actionSheet : ์œ„์ชฝ๋ถ€ํ„ฐ)โญ๏ธ

5. Alert ํ™”๋ฉด์— ๋„์šฐ๊ธฐ

present(alert, animated: true, completion: nil)

Alert๋„ View์ธ๋ฐ dismissํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?

์ž๋™์œผ๋กœ dismiss๊ฐ€ ๋˜์–ด์„œ(alert๊ฐ€ ์—†์–ด์ ธ) ๋”ฐ๋กœ alert๋ฅผ ์—†์• ์ฃผ๊ฑฐ๋‚˜ ํ•  ํ•„์š”๋Š” ์—†์–ด์šฉ๐Ÿ˜Ž

6. Alert ์™•์ดˆ๋ณด ํƒˆ์ถœ

Link to original
์š”๊ธฐ๊นŒ์ง€ alert ๋งŒ๋“ค๊ธฐ ์„ฑ๊ณต

1. Alert์— ํ…์ŠคํŠธํ•„๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ

alert.addTextField()
์—ฌ๊ธฐ์„œ ์ž ๊น addTextField์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž
addTextField ์ •์˜

alert์— ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธํ•„๋“œ๊ฐ€ alert์— ์ถ”๊ฐ€๋จ ์ถ”๊ฐ€์ ์ธ ํ…์ŠคํŠธํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ ํ…์ŠคํŠธํ•„๋“œ๋Š” alert ์ฐฝ์— ์Šคํƒ์ฒ˜๋Ÿผ ์Œ“์ž„ preferredStyle์ด alert์ธ ๊ฒฝ์šฐ์—๋งŒ ํ…์ŠคํŠธํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

addTextField ์›ํ˜•

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ configurationHandler๊ฐ€ ์กด์žฌํ•จ

configurationHandler

alert๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ(display) ์ „์— ํ…์ŠคํŠธํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ธ”๋ก ์ด ๋ธ”๋ก์€ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์œผ๋ฉฐ, ํ…์ŠคํŠธํ•„๋“œ ๊ฐ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๋‹จ์ผ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๐Ÿ”–์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด์ž addTextField๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  configurationHandler์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€๋ถ„์— ์—”ํ„ฐ๋ฅผ ์น˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€์‹  ์—ฌ๊ธฐ์„œ UITextField๊ฐ€ ์œ„์—์„œ ๋งํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธํ•„๋“œ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ ์œ„ ์ฝ”๋“œ๋Š” ํ…์ŠคํŠธํ•„๋“œ์˜ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ๋ฅผ cyan์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ฝ”๋“œ ์ž˜ ๋™์ž‘ํ•˜์ง€์šฉ?

์š”๋ ‡์ฝ”๋กฌ ํ…์ŠคํŠธํ•„๋“œ์˜ ์†์„ฑ๋“ค์„ ๋งˆ๊ตฌ๋งˆ๊ตฌ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹น

2. Label ๋งŒ๋“ค๊ธฐ & @IBOutlet ์—ฐ๊ฒฐ

์ด๊ฑด ์‰ฝ์ž–์•„ ์•ˆ ์ ์–ด๋„ ํ•  ์ˆ˜ ์žˆ์ž–์•„

3. choose ๋ฒ„ํŠผ์˜ handler์—์„œ Label์˜ ํ…์ŠคํŠธ๋ฅผ TextField์˜ ํ…์ŠคํŠธ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ

let choose = UIAlertAction(title: "choose", style: .default) { action in
    self.mainLabel.text = alert.textFields?[0].text
}
  • UIAlertController(alert)์— textFields๋ผ๋Š” ํ”„๋กœํผํ‹ฐ ์กด์žฌํ•ด์„œ ํ…์ŠคํŠธํ•„๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • textFields๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋Š” ๋ฐฐ์—ด
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…์ŠคํŠธํ•„๋“œ ์ถ”๊ฐ€ํ–ˆ์„ ์‹œ ๊ฐ๊ฐ์˜ ํ…์ŠคํŠธํ•„๋“œ์— ๋‹ค ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
    • ์•„๊นŒ ํ…์ŠคํŠธํ•„๋“œ๋Š” alert ์ฐฝ์— ์Šคํƒ์ฒ˜๋Ÿผ ์Œ“์ž„์ด๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ๊นŒ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฒซ๋ฒˆ์งธ ํ…์ŠคํŠธํ•„๋“œ๋Š” [0], ๋‘๋ฒˆ์งธ ํ…์ŠคํŠธํ•„๋“œ๋Š” [1], โ€ฆ ์ด๋Ÿฐ ์‹

4. Alert ์ดˆ๋ณด ํƒˆ์ถœ