iOS ์•ฑ ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜/TIL

5์ฃผ์ฐจ_iOS ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ_1์ผ์ฐจ_ToDoList ์•ฑ ๋งŒ๋“ค๊ธฐ_ํ•„์ˆ˜ ๊ตฌํ˜„

yeggrrr๐Ÿผ 2024. 3. 25. 21:05

 



<TIL>
์˜ค๋Š˜์€ TodoList ๋งŒ๋“ค๊ธฐ ๊ฐœ์ธ๊ณผ์ œ ๊ตฌํ˜„ ๊ณผ์ •์„
์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
โ˜บ๏ธ

์ด์ „์— ์ผ๋˜ ์ฝ”๋“œ ๋‹ค์Œ ๋‚  ๊นŒ๋จน๊ณ ..
๋‹ค์‹œ ๋‡Œ ๋ฆฌ์…‹^-^ ํ•˜๋ฃจ ์ข…์ผ ๋ฉ˜ํƒˆ ๋ฐ”์‚ฌ์‚ฌ์‚ญ๐Ÿ’ช๐Ÿป

๋‹ค์‹œ ์ฐจ๊ทผ์ฐจ๊ทผ ์‹œ์ž‘..!^^
์—ญ์‹œ ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ ์•ˆ ๊นŒ๋จน๊ณ  ๊ธฐ์–ต์— ์˜ค๋ž˜ ๋‚จ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.ใ…Žใ…Ž 

์ด๋ฒˆ TodoList ์•ฑ ๋งŒ๋“ค๊ธฐ ๊ฐœ์ธ๊ณผ์ œ ์†Œ๊ฐœ๋Š”
(4์ฃผ์ฐจ_iOS ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ_5์ผ์ฐจ) ๊ฒŒ์‹œ๋ฌผ์— ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. 

 

4์ฃผ์ฐจ_iOS ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ_5์ผ์ฐจ_ToDoList ๋งŒ๋“ค๊ธฐ_TIL

์˜ค๋Š˜์€ 4์ฃผ์ฐจ ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ ๊ฐœ์ธ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.๐Ÿ˜ƒ ํ•˜..์–ด๋ ต๋‹ค..ใ…Žใ…Žใ…Ž.. ์˜ค๋Š˜ ์–ด๋Š ์ •๋„ ๊ตฌํ˜„ํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ํ•„์ˆ˜ ๊ตฌํ˜„๊นŒ์ง€ ์™„์„ฑํ•˜๋ ค๋ฉด ์•„์ง ํ•  ๊ฒŒ ๋งŽ์•„์„œ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„๊ณผ ์ฝ”๋“œ ์ •๋ฆฌ๋Š” ๋‚˜์ค‘์— ๋‹ค

yegenie-coding.tistory.com

 



<์™„์„ฑ๋ณธ>


์Šคํ† ๋ฆฌ๋ณด๋“œ - ๊ธฐ๋ณธ UI ๊ตฌ์„ฑ

 

UI ๊ตฌ์„ฑ ์™„์„ฑ ํ™”๋ฉด

- navigation controller ์—ฐ๊ฒฐ (Bar Button Item ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ)
- TableView ์ถ”๊ฐ€
- Constraints ์ƒํ•˜์ขŒ์šฐ 0 ์„ค์ •
- Prototype Cells 1๋กœ ์„ค์ •
- Label & Switch ์ถ”๊ฐ€ (Label์€ ๋ฒ”์œ„ ํ™•์ธ์šฉ์œผ๋กœ background ์ƒ‰์ƒ ์„ค์ •ํ•จ)

- Label & Switch  Stack View๋กœ ๋ฌถ๊ธฐ

Stack View Spacing ์„ค์ •ํ•˜๊ธฐ
(→ Label๊ณผ Switch ์‚ฌ์ด์˜ ๊ณต๊ฐ„)


Stack View → Content View
(control drag & drop)

์ž์œ ๋กญ๊ฒŒ ์„ค์ •



์ƒ๋‹จ ์ถ”๊ฐ€ ๋ฒ„ํŠผ
→ Bar Button Item

 


 

ViewController

 

UITableView, UILabel, UISwitch
VC, Cell์— ์—ฐ๊ฒฐํ•˜๊ธฐ


UITableViewCell class ์ด๋ฆ„
→ Class & identifier ์„ค์ •ํ•˜๊ธฐ





์„ค์ •ํ•ด ๋†“์€ title, isOn ์ž˜ ์ ์šฉ๋๋Š”์ง€ ํ™•์ธ!


 

์ถ”๊ฐ€ ๋ฒ„ํŠผ

 

์ถ”๊ฐ€ ๋ฒ„ํŠผ ViewController์— ์—ฐ๊ฒฐํ•˜๊ณ ,
'์ถ”๊ฐ€' ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ, alert ๋„์šฐ๊ธฐ


์˜ค๋ฅ˜์—†์ด ์ž˜ ๋œจ๋‚˜ ํ™•์ธ!


๋‹ค์Œ์œผ๋กœ
alert์— ๋“ฑ๋ก, ์ทจ์†Œ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ!!

alert์— ์—ฌ๋Ÿฌ๊ฐœ์˜ textField๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
์—ฌ๊ธฐ์„œ๋Š” ํ•˜๋‚˜์˜ textField๋งŒ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
textFields[0] ์ด๋ ‡๊ฒŒ ์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ 0๋ฒˆ์งธ ๊ฐ€์ ธ์˜ค๊ธฐ.

 ๊ทธ๋ฆฌ๊ณ 

reloadData() ์žŠ์ง€๋ง๊ธฐ!

์ด๋ ‡๊ฒŒ ํ•˜๊ณ , ์‹คํ–‰์‹œํ‚ค๋ฉด?

์ด๋ ‡๊ฒŒ ๋“ฑ๋ก ๋ฒ„ํŠผ์ด ์ถ”๊ฐ€๋˜์–ด์žˆ๊ณ ,
์›ํ•˜๋Š” title์„ ์ ๊ณ  '๋“ฑ๋ก' ํด๋ฆญํ•˜๋ฉด?

์ด๋ ‡๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!


์ด์–ด์„œ ์ทจ์†Œ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ทจ์†Œ๋ฒ„ํŠผ์€ ํด๋ฆญํ–ˆ์„ ๋•Œ,
์–ด๋– ํ•œ ๋™์ž‘๋„ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ๊ฐ„๋‹จํ•˜๋‹ค!
(sytle: .cancel ๋Œ€์‹  .default ํ•ด๋„ ์ƒ๊ด€์—†์Œ)

default๋กœ ํ•ด๋†“์€ ์ƒํƒœ์—์„œ
alert.addAction(registerButton)๊ณผ alert.addAction(cancelButton) ๋จผ์ € ์“ฐ์ธ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ
๋ฒ„ํŠผ ์ขŒ์šฐ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ์‹คํ–‰์‹œํ‚ค๋ฉด?

์ด๋ ‡๊ฒŒ ๋“ฑ๋ก ์˜†์— ์ทจ์†Œ๋ฒ„ํŠผ์ด ์ƒ๊ฒผ๋‹ค!
(.cancel๋กœ ํ•ด์„œ ์ทจ์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜จ ๊ฒƒ์ž„.)


 

Switch ์‚ฌ์šฉ
(์™„๋ฃŒ/๋ฏธ์™„๋ฃŒ ์ƒํƒœ ๋ณ€๊ฒฝ)




๊ตฌ๊ธ€๋ง์œผ๋กœ ์™„๋ฃŒ ์‹œ ๊ฐ€๋กœ์„ ์„ ์ถ”๊ฐ€ํ•  ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„์„œ
๊ทธ๋Œ€๋กœ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ€์ ธ์™”๋‹ค..ใ…Žใ…Ž

(์ถœ์ฒ˜)
https://stackoverflow.com/questions/13133014/how-can-i-create-a-uilabel-with-strikethrough-text

 

How can I create a UILabel with strikethrough text?

I want to create a UILabel in which the text is like this How can I do this? When the text is small, the line should also be small.

stackoverflow.com


๋ฐ”๋กœ ์ด ๋‹จ๊ณ„์—์„œ selector(์…€๋ ‰ํ„ฐ)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
์…€๋ ‰ํ„ฐ๋Š” UIKit ๋‚ด๋ถ€์˜ Objective-C ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€
์…€๋ ‰ํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ,
์ „๋‹ฌ์— ํ•„์š”ํ•œ ์…€๋ ‰ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์…€๋ ‰ํ„ฐ๋Š” ํƒ€์ž…์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์ง€๋งŒ,

์œ„์™€ ๊ฐ™์ด #selector()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š”๋‹ค.

์œ„์™€ ๊ฐ™์ด ์…€๋ ‰ํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋ฉ”์„œ๋“œ๋Š” @objc๋ฅผ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.
(#selector์— ์ˆœ์ˆ˜ func ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ธ์‹์ด ์•ˆ๋จ!)

tag์€ ์ง€์ •ํ•ด์ฃผ๊ณ  ์‹ถ์€ ์ˆซ์ž๋ฅผ ๋‹ด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ tag์€ indexPath.row๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.

toggle()

์—ฌ๊ธฐ์„œ toggle()์€
Bool๊ฐ’์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์ฃผ๊ณ , ์‹คํ–‰์‹œํ‚ค๋ฉด?

์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค
๋””๋ฒ„๊น… ์ฐฝ์— print๋˜๋Š” ๊ฑฐ ํ™•์ธ ๊ฐ€๋Šฅ!


 ์Šค์œ„์น˜๋ฅผ on/off ํ•  ๋•Œ, ํ•ด๋‹นํ•˜๋Š” ๋ฌธ๊ตฌ์— ๊ฐ€๋กœ์„ ์„ ๋„ฃ์œผ๋ ค๋ฉด
๊ทธ ํ–‰์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์œ„์— ํ‘œ์‹œํ•ด ๋†“์€ ์ฝ”๋“œ์™€ ๊ฐ™์ด
cell.doneSwitch.tag = indexPath.row๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.
๊ทธ๋Ÿฐ ํ›„, ์‹คํ–‰์‹œํ‚ค๋ฉด!

์œ„์—์„œ ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์Šค์œ„์น˜๋ฅผ ํด๋ฆญํ•˜๋ฉด,
์Šค์œ„์น˜ ์œ„์น˜์— ๋”ฐ๋ผ 0~2๊นŒ์ง€ ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ธฐ์กด์— ์ ์—ˆ๋˜
let todo = todoList[indexPath.row] ๋Š”
let row = indexPath.row์ด๋ฏ€๋กœ
let todo = todoList[row]๋กœ ๋ณ€๊ฒฝ!

atrritbutedText ์ฐธ๊ณ 


๊ทธ๋ฆฌ๊ณ  if ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ
์Šค์œ„์น˜๊ฐ€ isOn์ผ ๋•Œ, ์•ž์„œ ๋งŒ๋“  ๊ฐ€๋กœ์„  ๊ธ‹๊ธฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ๋œ todo.title + textColor ํ•‘ํฌ์ƒ‰
isOn์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋ ˆ์ด๋ธ” ํ…์ŠคํŠธ ์Šคํƒ€์ผ nil + ๊ทธ๋ƒฅ todo.title + textColor ๊ฒ€์€์ƒ‰


์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹คํ–‰ํ•ด๋ณด๋ฉด?

์ด๋ ‡๊ฒŒ doneSwitch๊ฐ€ isOn์ด ๋˜๋ฉด,
title์— ๊ฐ€๋กœ์„ ์ด ๊ทธ์–ด์ง€๊ณ , ๊ธ€์ž ์ƒ‰์ƒ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.


 

Todo ์‚ญ์ œํ•˜๊ธฐ



์ด๋ฒˆ์—๋Š” Todo๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ํ•˜๋ฉด,
์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

tableView๋ฅผ ์ณ์„œ ๋‚ด๋ฆฌ๋‹ค๋ณด๋ฉด,
'to commit the insertion or deletion of~' ๋ผ๊ณ  ์ ํ˜€์žˆ๋Š”๊ฑฐ ์„ ํƒ

์ด์ œ ์•„๋ž˜ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.


if ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ
editingStyle์ด .delete ์ผ ๋•Œ,
todoList์—์„œ ํ•ด๋‹นํ•˜๋Š” ํ–‰์„ ์ œ๊ฑฐํ•˜๋„๋ก!

๊ทธ๋ฆฌ๊ณ  ์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ์‚ญ์ œ๋  ๋•Œ์˜ ์• ๋‹ˆ๋ฉ”๋‹ˆ์…˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์‹คํ–‰ํ•˜๋ฉด ์˜†์œผ๋กœ ์Šค์™€์ดํ”„ํ•ด์„œ delete๋ฅผ ํด๋ฆญํ•˜๋ฉด,
ํ•ด๋‹น ์…€์ด ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์—ฌ๊ธฐ๊นŒ์ง€
TodoList ์•ฑ ๋งŒ๋“ค๊ธฐ ํ•„์ˆ˜ ๊ตฌํ˜„์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค.โ˜บ๏ธ

Standard๋ฐ˜ ๊ณผ์ œ ๋‹ค ํ•˜๊ณ ๋‚˜๋ฉด,
์ด์–ด์„œ ์„ ํƒ ๊ตฌํ˜„ ์‹œ๋„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
(๋‚˜์ค‘์— ์ •๋ฆฌ ์˜ˆ์ •)



 

 

 




728x90