๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[Swift] UIButton ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ addTarget (์ฒ˜์Œ ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ)

by ํ‹ด๋”” 2021. 3. 23.
๋ฐ˜์‘ํ˜•

์ด๋ฒˆ์— ์•Œ์•„๋ณผ ๊ฑด UIButton์˜ ์ƒ์„ฑ๊ณผ  UIControl action ์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค~~  ์Šค์œ„ํ”„ํŠธ๋กœ ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด์‹œ๊ฑฐ๋‚˜ ๊ณต๋ถ€ํ•˜์‹œ๊ธฐ ์œ„ํ•ด ์ด ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์…จ๋‹ค๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ทฐ๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  xcode ์Šค์œ„ํ”„ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธํŒ…๋˜์–ด ์žˆ๋Š” Main.Storyboard ์™€ ViewcController๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

๋งŒ์•ฝ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†์ด ์ฝ”๋“œ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

[Swift] Storyboard ์—†์ด Swift ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

Swift ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ ์‹œํ‚ค๋ฉด ๊ธฐ๋ณธ์œผ๋กœ Main.storyboard๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ์žก๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฉ”์ธ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ํŠœํ† 

youbidan-project.tistory.com

 


๋จผ์ €  Main.storyboard๋กœ ์ด๋™!

Shift + โŒ˜ + L 

๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์•„๋ž˜ ํ™”๋ฉด๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ผœ์ค๋‹ˆ๋‹ค. 

ํ•ญ๋ชฉ์—์„œ UIButton์„ ๋“œ๋ž˜๊ทธ ํ•ด์„œ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ์žˆ๋Š” view ๋กœ ๋Œ์–ด ์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์œ„ ํ™”๋ฉด๊ณผ ๊ฐ™์ด view ์— button ์ด ์ถ”๊ฐ€๋˜์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ฒ„ํŠผ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋ทฐ ์œ„์— ์žˆ๋Š” ๋ฒ„ํŠผ์„ ๋”๋ธ” ํด๋ฆญํ•˜๊ฑฐ๋‚˜

์ธ๋””์ผ€์ดํ„ฐ์—์„œ ๋”๋ธ” ํด๋ฆญ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ๋„ค๋น„๊ฒŒ์ดํ„ฐ์—์„œ

 ์˜ต์…˜ํ‚ค + ์™ผ์ชฝ ์ฐฝ์— ๋„์šฐ๊ณ  ์‹ถ์€ ํŒŒ์ผ์„ ํด๋ฆญํ•˜๋ฉด 

ํ•œ ํ™”๋ฉด์— ๋‘ ํŒŒ์ผ์˜ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค. 

ํ•œ์ชฝ์—๋Š”  ViewController.swift ๋‹ค๋ฅธ ํ•œ์ชฝ์—๋Š” Main.stroyboard ๋„์›Œ ์ค๋‹ˆ๋‹ค

 

button ์—์„œ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ ํ•ด์„œ ViewController.swift ์—์„œ ๋†“์Šต๋‹ˆ๋‹ค. 

 

Name ์˜์—ญ์— ๋ฒ„ํŠผ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” button ์ด๋ผ๊ณ  ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค

@IBOutlet weak var button: UIButton!

IBOulet์ด ์ƒ์„ฑ๋œ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด์ œ ViewController.swift ์—์„œ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ๋ฐฐ์น˜์‹œํ‚จ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

viewDidLoad()์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(printLog), for: .touchUpInside)
    }

addTarget์€ event ์ค‘ UIControl Actions์ž…๋‹ˆ๋‹ค. 

action / target pattern์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

์‚ฌ์šฉ์ž๊ฐ€ control์—์„œ ์ง€์ •ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ด์™€ ๊ด€๋ จ๋œ ์ž‘์—…์ด ๋“ฑ๋ก๋œ target์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค

์—ฌ๊ธฐ์„œ ํƒ€๊ฒŸ์€ self ์ด๊ณ    #selector()์—์„œ ์ง€์ •ํ•œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ „์—๋Š” ํ•จ์ˆ˜ ๋ช…๋งŒ ์ ์—ˆ์—ˆ๋Š”๋ฐ ์Šค์œ„ํ”„ํŠธ ๋ฒ„์ „ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ

์ด๋ ‡๊ฒŒ ์˜ค๋ธŒ์ ํ‹ฐ๋ธŒ ํ˜•ํƒœ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค...

 

    @objc func printLog() {
        print("button clicked!")
    }

๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด printLog ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ด์„œ ํ™•์ธํ•ด ๋ณด๋ฉด!

 

๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ์ฝ˜์†”์— ๋กœ๊ทธ๊ฐ€ ์ฐํžˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ž‘์„ฑํ•ด ์ค€ ํ•จ์ˆ˜์—์„œ ์ธ์ž๋ฅผ ์ „๋‹ฌ ๋ฐ›๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

    @objc func printLog(_ sender: UIButton) {
        print("button clicked!")
    }

UIButton ์€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ UIButton ์„ sender ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(printLog(_:)), for: .touchUpInside)
        button.tag = 1123434

    }

addTarget์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ ํƒ ๋ฐ ํ•จ์ˆ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

printLog(_:) ๋กœ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ  printLog ์—์„œ button ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด

๋ฒ„ํŠผ์˜ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ด ์ค๋‹ˆ๋‹ค.

    @objc func printLog(_ sender: UIButton) {
        print("button clicked! \(button.tag)")
    }

print ์—์„œ ๋ณ€์ˆ˜ ๊ฐ’ ํ”„๋ฆฐํŠธ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด \()์— button.tag ์ž‘์„ฑํ•˜๊ณ  ๋นŒ๋“œํ•ด์„œ ์‹คํ–‰ ํ•ด ์ค๋‹ˆ๋‹ค.

 

๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ๋ฒ„ํŠผ ํƒœ๊ทธ๊ฐ€ ์ฝ˜์†”์— ์ฐํžˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๋งŒ์•ฝ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๋ช…์„ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒฝ์šฐ

    @objc func printLog(name sender: UIButton) {
        print("button clicked! \(button.tag)")
    }

addTarget ์—์„œ๋„ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋กœ ์ง€์ •ํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(printLog(name:)), for: .touchUpInside)
        button.tag = 1123434
    }

ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€