๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS/Issue

[Issue] TableViewCell์— ์ถ”๊ฐ€ํ•œ ๋ฒ„ํŠผ ๊ตฌ๋ณ„ํ•˜๊ธฐ

by Callie_ 2023. 8. 6.

 

๐Ÿ™ ๋ฌธ์ œ์ƒํ™ฉ: TableView๋ฅผ ์ด์šฉํ•ด์„œ cell์„ ๋งŒ๋“ค๋ฉด ์ข‹์€ ์ ์€ ๊ฐ™์€ ๊ฑธ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์ƒ๊ฐํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ๊ทธ ์ผ๊ด€ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋Š” ์…€์„ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•  ๊ฒƒ์ธ์ง€ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ indexPath์— ํ—ˆ์šฐ์  ๋Œ€๋Š” ๋‚ด๊ฐ€ ์ง๋ฉดํ•œ... TableViewCell์— ์ถ”๊ฐ€ํ•œ ๋ฒ„ํŠผ ์ค‘ ํŠน์ • index์˜ ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๋ ค๋Š”๋ฐ (ํŒ์—…์ฐฝ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”์ค‘์ด์—ˆ๋‹ค) ์–ด์งธ์„œ์ธ์ง€ indexPathํ™œ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ๊ณตํฌ. ์กฐ๊ฑด๋ฌธ์„ ๊ฐ€์žฅ ์ž์‹ ์žˆ๊ฒŒ ์“ธ ์ค„ ์•Œ์•„์„œ ์„ค๋งˆ ์กฐ๊ฑด๋ฌธ์„ ์“ฐ๋ฉด ์•ˆ๋˜๋‚˜? ํ•˜๋Š” ์ƒ๊ฐ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์ •์„ ํ–ˆ์ง€๋งŒ '์…€' ์•ˆ์˜ 'ํŠน์ •ํ•œ ๋ฒ„ํŠผ' ํด๋ฆญ์ด ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์‚ฝ์งˆ์ด ์‹œ์ž‘ ๋˜์—ˆ๋‹ค. 

 

โœ๏ธ ํ•ด๊ฒฐ๋ฐฉ์•ˆ: ๊ตฌ๊ธ€๋ง์˜ ๊ตฌ๊ธ€๋ง์˜ ๊ตฌ๊ธ€๋ง์˜ ๊ตฌ๊ธ€๋ง.... ์„ ํ•˜๋‹ค๊ฐ€ (delegate๊ณผ clouser์˜€๋‚˜? ์ด ๋‘๊ฐ€์ง€ ๋ฐฉ์•ˆ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์™”์ง€๋งŒ ๋”ฐ๋ผํ•˜๋‹ค๊ฐ€ ์˜จ๊ฐ– ์˜ค๋ฅ˜์ˆ˜์ง‘์„ ํ•ด์„œ ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„ํ—ค๋งธ๋‹ค) ์ด๋Ÿด ๋• indexPath๊ฐ€ ์•„๋‹ˆ๋ผ (์ด๋ถ€๋ถ„์€ ์ข€ ๋” ์ฐพ์•„๋ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค) tag ๊ธฐ๋Šฅ์„ ์จ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋‹ค๋งŒ, ๋‚˜์ค‘์— ํƒœ๊ทธ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋‚˜์ค‘์— ๊ทธ๊ฑธ ๋‹ค~ ์จ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ค์›€์ด ์žˆ๊ธฐ์— ๋น„์ถ”์ฒœ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋งŽ์ด ๋‚˜์™”๋Š”๋ฐ, ํ˜„์žฌ ๋‚ด๊ฐ€ ๊ตฌํ˜„์ค‘์ธ ๊ฑด ๋‹คํ–‰ํžˆ ํƒœ๊ทธํ•  ์ˆ˜๊ฐ€ ์ ์œผ๋‹ˆ ์ด ๋ฐฉ๋ฒ•์„ ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‘๋‘ฅ. ๊ทธ๋ ‡๊ฒŒ ๋จธ๋ฆฟ์†์„ ์Šค์ณ์ง€๋‚˜๊ฐ€๋Š” ์ˆ˜์—… ๋•Œ ๋ฐฐ์šด AddTarget๊ณผ @objc func ์ด ์ƒ๊ฐ์ด ๋‚ฌ๊ณ ... ๋ชฉ์ ์ด ์กฐ๊ธˆ ๋‹ค๋ฅด์ง€๋งŒ ๋ฒ„ํŠผ์— ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ทธ๊ฑธ ํ™œ์šฉํ–ˆ๋”๋‹ˆ ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค. ๐ŸŽ‰

 

 

์•„๋ž˜๋Š” ๊ทธ ๊ณผ์ •์˜ ์ผ๋ถ€๋ฅผ ๋‚จ๊ธด๋‹ค.

 

 

 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        print(indexPath)
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "SettingTableViewCell") as! SettingTableViewCell
        
        //๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ํŒ์—…
        
        cell.detailButton.tag = indexPath.row
        cell.detailButton.addTarget(self, action: #selector(detailButtonClicked), for: .touchUpInside)
        
        return cell
        
    }

 

1. ๋จผ์ € cellForRowAt ์— cell.๋งŒ๋“ค์–ด๋‘”๋ฒ„ํŠผ์ด๋ฆ„.tag = indexPath.row๋กœ ํƒœ๊ทธ์™€ ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถฐ์ค€๋‹ค. ๋‚œ indexPath๋งŒ ์“ฐ๋ ค๊ณ  ํ–ˆ์œผ๋‹ˆ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์•˜๋˜ ๊ฒƒ.

 

2. ๊ทธ๋‹ค์Œ addTarget์„ ๊ทธ ์•„๋žซ์ค„์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. action์—” #selector(๋ฒ„ํŠผ ํ•จ์ˆ˜์ด๋ฆ„)์„ ์ ์–ด์ฃผ๊ณ , .touchUpInside๋กœ ๋งž์ถฐ์ค€๋‹ค.

 

 

 

    //์ดˆ๊ธฐํ™”๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ
    
    @objc func detailButtonClicked (_ sender: UIButton) {
        if sender.tag == 2 {
            let alert = UIAlertController(title: "๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”", message: "์ •๋ง ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ค๊ฑด๊ฐ€์š”?๐Ÿฅบ", preferredStyle: .alert)
            let ok = UIAlertAction(title: "์˜ˆ", style:.default)
            let cancel = UIAlertAction(title: "์•„๋‹ˆ์š”", style: .cancel)
            
            alert.addAction(cancel)
            alert.addAction(ok)
            
            present(alert, animated: true)
        }

 

3. ์ด ํŒŒํŠธ๋Š” tableview ์ชฝ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, viewController์˜์—ญ์— ์ ์–ด์ค˜์•ผํ•œ๋‹ค. ๊ธธ ์žƒ์ง€ ๋ง๊ฒƒ.

 

4. ๊ทธ๋ฆฌ๊ณ  ๋†€๋ž๊ฒŒ๋„... ์—ฌ๊ธด ๋‹ค ์ง์ ‘ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. _sender ์ด ๋ถ€๋ถ„๊นŒ์ง€๋„. ๋จผ์ € func ~ ์ด๋ถ€๋ถ„์„ ์จ์ฃผ๊ณ , ์ด ๋ฒ„ํŠผ์ด ์‹คํ–‰ ๋˜์—ˆ์„ ๋•Œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์•ˆ์— ์ ์–ด์ฃผ์—ˆ๋‹ค. ๋‚˜๋Š” tableViewCell ๊ธฐ์ค€ ์„ธ๋ฒˆ์งธ row์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋ฒ„ํŠผ์„ ์„ ํƒํ•ด์„œ ๊ทธ ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— tag๋ฅผ 2๋กœ ์ ์—ˆ๋‹ค.

 

5. func ์•ž์— @objc๋ฅผ ๊ผญ ๋ถ™์—ฌ์ค„ ๊ฒƒ. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ๋งŒ๋“  ํ•จ์ˆ˜ ์ด๋ฆ„(detailButtonClicked)๋ฅผ cellForRowAt์— ์“ด AddTarget์˜ #selector ๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋! ์–ด๋ ค์šฐ๋ฉด์„œ๋„ ํ•ด์น˜์šฐ๊ณ  ๋‚˜๋‹ˆ ๋‚˜๋ฆ„ ์‰ฌ์šด ๊ฒƒ... ๊ฐ™๊ธฐ๋„?

 

 

 

 

 

 

๊ฒฐ๊ณผ๋ฌผ:

 

 

๊ตฌํ˜„ํ•œ tableView

 

์ง€์ •ํ•œ ๋ฒ„ํŠผ์— ์ง€์ •๋œ ์•ก์…˜ ๊ตฌํ˜„ํ•˜๊ธฐ~

 

 

 

 

 

 

 

 

์ฐธ๊ณ : https://stackoverflow.com/questions/20655060/get-button-click-inside-uitableviewcell