Skip to content

Latest commit

ย 

History

History
87 lines (56 loc) ยท 5.82 KB

Week3.md

File metadata and controls

87 lines (56 loc) ยท 5.82 KB

3์ฃผ์ฐจ ๊ณผ์ œ

์ด๋ฒˆ์ฃผ์—๋Š” Delegate + Protocol + TableView + CollectionView๋ฅผ๋ฐฐ์› ๋‹น

์ฒ˜์Œ์— ๋“ค์„๋• ์ •๋ง ์ดํ•ด๊ฐ€ 1๋„ ๋˜์ง€์•Š๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ฟœ๋ฟœํ•˜๋Š” xcode๋ฅผ ๋ณด๋ฉฐ ๋ˆˆ๋ฌผ์ด ์ฃผ๋ฅด๋ฅตํ˜๋ €์ง€๋งŒ,, ์ง‘์—์™€์„œ ์ฐจ๋ถ„ํ•œ ๋งˆ์Œ๊ฐ€์ง์œผ๋กœ ๋ณต์Šตํ•˜๋ฉฐ ๋‹ค์‹œ ํ•ด๋ณด๋‹ˆ ์ž˜๋ซ๋‹ค.

delegate + Protocol + tableView + CollectionView

๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ํ”„๋กœํ† ์ฝœ์„ ์•Œ์•„์•ผํ•˜๋Š”๋ฐ, ํ”„๋กœํ† ์ฝœ์€ ๊ตฌํ˜„์„ ์œ„ํ•œ ์ฒญ์‚ฌ์ง„์˜ ๋Š๋‚Œ์ด์—ˆ๋‹ค.

protocol ์ด๋ฆ„ {
    ๋‚ด์šฉ
}

์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ•ด์ฃผ๊ณ , ์–ด๋Š ๋ทฐ์ปจ์—๋‹ค ๋งŒ๋“ค์–ด๋„ ์–ด๋Š ๋ทฐ์ปจ์—์„œ๋‚˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. ์šฐ์„  ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์จ์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•ด์„œ ์˜€๋Š”๋ฐ, ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ํ•ด์ฃผ๋Š” ๊ณผ์ •์†์—์„œ ํ”„๋กœํ† ์ฝœ์—์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ ํ•ด์ฃผ๊ณ , var delegate๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค„ ๊ณณ์„ ์„ ์–ธํ•ด์ค€๋‹ค. ๊ทธ ํ›„, ์ „๋‹ฌ๋ฐ›์„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ , ๊ทธ ์ดํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋ทฐ์ปจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ_์ค„_๋ทฐ์ปจ.delegate = self (๋‚ด๊ฐ€ ๋’ท์ฒ˜๋ฆฌ ํ•˜๊ฒ ๋‹ค.) ๋ผ๊ณ  ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ์งœ์ฃผ๊ฒŒ ๋˜๋ฉด, ๊ตฌํ˜„๋œ ํ•จ์ˆ˜์—์„œ "ใ…‡ใ…‹ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์„œ ๋งŒ๋“  ํ•จ์ˆ˜๋Œ€๋กœ ์ฒ˜๋ฆฌํ• ๊ฒŒ"ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ฒ˜์Œ์— ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋ฌ๋˜ ๋ถ€๋ถ„์€, ๊ทธ๋ƒฅ ๋ทฐ์ปจ๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋ฉด๋˜์ง€ ์™œ ๊ตณ์ด ๋ณต์žกํ•˜๊ฒŒ ๊ผฌ์•„์„œ ๋ณด๋‚ด๋Š”๊ฐ€ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์ด๊ฑด push๋‚˜ present์‹œ์—๋Š” ๋งž๋Š” ๋ง์ด์—ˆ์ง€๋งŒ, dismiss๋‚˜ pop์‹œ์—๋Š” ์™„๋ฒฝํžˆ ํ‹€๋ฆฐ์ƒ๊ฐ์ด์—ˆ๋‹ค. ๊ฐ’์„ ๋ณด๋‚ด๋Š” ํ–‰์œ„ ์ž์ฒด๊ฐ€ push๋‚˜ present์‹œ์— ์ง„ํ–‰๋˜๋Š” ๊ฒƒ ์ด์—ˆ๊ธฐ์—, ๋‚ด๊ฐ€ ์•„๋ฌด๋ฆฌ ๋ฐ›์•„!! ๋ฐ›์œผ๋ผ๊ณ !!! ํ•ด๋„ ์˜๋ฏธ๊ฐ€ ์—†๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. (์ง์‚ฌ๋ž‘์ด๋„ค,,,) ๊ทธ๋ž˜์„œ ์ด๋Ÿด๊ฒฝ์šฐ, ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

ํ…Œ์ด๋ธ” ๋ทฐ์˜ ๊ฒฝ์šฐ์—๋Š” ์ฒ˜์Œ์—๋Š” ํ…Œ์ด๋ธ” ๋ทฐ๋„ ๋‹ค๋ฅธ UIView๋“ค ์ฒ˜๋Ÿผ '๋ทฐ'๋กœ์จ ๋ณด๋Š” ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์ดํ•ด๊ฐ€ ์กฐ๊ธˆ ํž˜๋“ค์—ˆ์ง€๋งŒ,, ๊ตฌ์„ ์ƒ๋‹˜์„ ํ†ตํ•ด ์—ด์‹ฌํžˆ ๊ฒ€์ƒ‰ํ•˜๋‹ค๋ณด๋‹ˆ ํ•œ ๋Œ“๊ธ€์—์„œ "๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๊ด€์ ์œผ๋กœ ๋ด๋ผ" ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณด๊ณ  ๊นจ๋‹ณ์•˜๋‹ค. ์•„ ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ ์ด์˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š”๊ฑฐ๊ตฌ๋‚˜. ๊ทธ๋ž˜์„œ ๊ทธ ์ดํ›„๋กœ๋Š” ์ž˜ ์งค ์ˆ˜ ์žˆ๋˜๊ฒƒ ๊ฐ™๋‹ค.ํ•˜ํ•˜.. ์ปฌ๋ ‰์…˜๋ทฐ๋Š” ํ…Œ์ด๋ธ” ๋ทฐ์™€ ๊ฑฐ์˜ ํก์‚ฌํ•œ ๊ฐœ๋…์ธ ๊ฒƒ ๊ฐ™์•„์„œ ํ…Œ์ด๋ธ”๋ทฐ๋ฅผ ์ดํ•ดํ•˜์ž ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ ์ด์šฉํ•ด์„œ ์นœ๊ตฌ๋ชฉ๋ก์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑฐ์˜€๋‹ค. ํ…Œ์ด๋ธ” ๋ทฐ๋Š” dequeueReusableCell ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ๋ทฐ๋ฅผ ์งœ๋Š” ๊ฒƒ ์ด๊ธฐ๋•Œ๋ฌธ์—, ๋ช‡๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…์ด ์•ˆ๋˜๋Š” ์ƒํ™ฉ์—์„  dequeueReusableCell์ด ๋ฐฉ์‹์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„์„ ํ•ด์•ผ ํ–ˆ๋”ฐ.

guard let friendsCell = tableView.dequeueReusableCell(withIdentifier: FriendsTableViewCell.identifier, for: indexPath) as? FriendsTableViewCell else {return UITableViewCell() }

CellController์—์„œ ์…€์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ›์•„์˜ค๊ณ , ๊ฐฏ์ˆ˜๋Š”

extension FreindsViewController : UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return friendList.count
}

์œผ๋กœ ์„ธ์ฃผ์–ด ๋ฐ›์•„์™”๋‹ค. ๊ทธ๋Ÿผ ๊ฐ๊ฐ์˜ ์…€์— ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋„ฃ์–ด์ฃผ๋Š๋ƒ! ๋ผ๊ณ  ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด ๋‹ตํ•ด์ฃผ๋Š”๊ฒŒ ์ธ์ง€์ƒ์ •.

friendsCell.setData(imageName: friendList[indexPath.row].imageName, Name: friendList[indexPath.row].name, message:friendList[indexPath.row].state)
    return friendsCell

friendsCellController์— setDataํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ ! ์ดํ•จ์ˆ˜๊ฐ€ ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๋ฅผ ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์ด๋‹น.

์•”ํŠผ ๊ทธ๋ ‡๊ฒŒ ๋š๋”ฑ๋š๋”ฑ ํ•ด์„œ ๋งŒ๋“ค๋ฉด!

์š”๋ ฟ๊ฒŒ ๊ตฌํ˜„์ด ๋œ๋‹ค. ์ด์ œ ์—ฌ๊ธฐ์„œ ๊ฐ ์…€์„ ๋ˆŒ๋Ÿฌ์„œ ๋‹ค๋ฅธ ๋ทฐ์ปจ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•˜๋Š” ๋ฒ•์€!

func tableView(_ tableView: UITableView,  didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
    guard let profileVC = storyboard?.instantiateViewController(identifier: "FreindsProfileViewController") as? FreindsProfileViewController else{return}
    self.present(profileVC, animated: true, completion: nil)
    profileVC.setData(imageName: friendList[indexPath.row].imageName, Name: friendList[indexPath.row].name, state: friendList[indexPath.row].state)

์œผ๋กœ didselect๋˜๋ฉด profileVC๋ฅผ ๋ถˆ๋Ÿฌ์ฃผ๊ณ , ๊ทธ์•ˆ์—์„œ ๊ฐ’์„ ๋‹ค์‹œ ์ฐพ์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๋‹น.

๋‘๋ฒˆ์งธ๋Š”, ์ปฌ๋ ‰์…˜ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๊ฑด๋ฐ, ์ปฌ๋ ‰์…˜ ๋ทฐ์˜ ๋ ˆ์ด์•„์›ƒ์„ ์žก๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” ํ…Œ์ด๋ธ” ๋ทฐ์˜ ๋ฐฉ๋ฒ•๊ณผ ๋˜‘๊ฐ™์•„์„œ ๊ทธ๋ƒฅ ์ž˜ ๊ตฌํ˜„ํ–ˆ๋‹ค ใ…‹.ใ…‹

๋„์ „๊ณผ์ œ ์•ก์…˜ ์‰ฌํŠธ๋Š” ๋ฒ„ํŠผ ํด๋ฆญ์‹œ actionSheet์„ ๋„์šฐ๋Š” ๊ฒƒ ์ด์—ˆ๋Š”๋ฐ,

 let actionSheet = UIAlertController(title: .none, message: .none, preferredStyle: .actionSheet)
       actionSheet.addAction(UIAlertAction(title: "ํŽธ์ง‘", style: .default, handler: {(ACTION:UIAlertAction) in
       }))

์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„์€, addAction์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฒƒ์ด๋‹ค.

๋‘๋ฒˆ์งธ ๋„์ „๊ณผ์ œ๋Š”, ์Šฌ๋ผ์ด์Šค ํ•ด์„œ ์ฐจ๋‹จ,์ˆจ๊น€์ด ๋œจ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—‡๋Š”๋ฐ,

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

์ด ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ ํ•ด ์คฌ๋‹ค. ์ฐจ๋‹จ์„ ๋ˆŒ๋ €์„๋• ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๋ฅธ ๋ฆฌ์ŠคํŠธ๊ฐ’์„ remove(indexPath)ํ•ด์ฃผ์–ด์„œ ๊ทธ ๊ฐ’์„ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ ! reload()ํ•ด์ฃผ์–ด์„œ ํ…Œ์ด๋ธ”๋ทฐ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•ด์ฃผ์—ˆ๋‹น.

๋งˆ์ง€๋ง‰ ๋„์ „๊ณผ์ œ๋Š”,,, ์‹œ๊ฐ„๋ฌธ์ œ๋•Œ๋ฌธ์— ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฑด ์กฐ๋งŒ๊ฐ„ ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ํ•ด๋ณผ์˜ˆ์ •์ด๋‹ค.

์•”ํŠผ ์ด์ œ ๊ตฌํ˜„ํ•œ ๋‚ด์šฉ ์‹œ์—ฐ์˜์ƒ!