iOS/UMC

[iOS] 4-5주 차 미션

year.number 2022. 10. 31. 23:13

 

 

 

4주 차 미션

✅ TableView를 이용하여 메모장 구현하기


먼저 필요한 ViewController 파일을 생성해준다.

 

 

 

 

TableView DataSource와 Delegate 프로토콜을 채택하여 필요한 코드를 작성해준다.

UITableViewDelegate

- 테이블 뷰에서 section의 header, footer를 관리하고 셀을 삭제하거나 위치를 바꾸고 그 외의 다른 작업을 수행하기 위한 메서드를 제공한다

- 테이블뷰의 시각적인 부분을 수정해주고, 테이블 뷰의 개별 행 편집 등을 도와주는 역할을 한다

 

UITableViewDataSource

- 테이블 뷰의 셀에 사용되는 데이터를 관리하기 위한 메서드를 제공한다

- 테이블뷰를 생성하고 수정하는데 필요한 정보를 테이블뷰 객체에 제공하는 역할을 한다

 

 

 

 

    // Create new note
    @IBAction func didTapNewNote() {
        guard let vc = storyboard?.instantiateViewController(identifier: "new") as? EntryViewController else {return}
        vc.title = "New Note"
        vc.navigationItem.largeTitleDisplayMode = .never
        vc.completion = {noteTitle, note in
            self.models.append((title: noteTitle, note: note))
            self.navigationController?.popViewController(animated: true)
            self.label.isHidden = true
            self.table.isHidden = false
            
            self.table.reloadData()
        }
        navigationController?.pushViewController(vc, animated: true)
    }

새로운 메모를 작성할 때 필요한 코드를 구현한다

✨ EntryViewController 코드

//
//  EntryViewController.swift
//  Week4-project
//
//  Created by yeonsu on 2022/11/02.
//

import UIKit

class EntryViewController: UIViewController {

    @IBOutlet var titleField: UITextField!
    @IBOutlet var noteField: UITextView!
    
    public var completion: ((String, String) -> Void)?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        titleField.becomeFirstResponder()
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Save", style: .done, target: self, action: #selector(didTapSave))
    }
    
    @objc func didTapSave() {
        if let text = titleField.text, !text.isEmpty, !noteField.text.isEmpty {
            completion?(text, noteField.text)
        }
    }
}

 

 

 

 

        let model = models[indexPath.row]
        
        // Show note controller
        guard let vc = storyboard?.instantiateViewController(identifier: "note") as? NoteViewController else { return }
        vc.navigationItem.largeTitleDisplayMode = .never
        vc.title = "Note"
        vc.noteTitle = model.title
        vc.note = model.note
        navigationController?.pushViewController(vc, animated: true)
    }

작성한 메모를 확인할 때 필요한 코드를 구현한다.

✨ NoteViewController 코드

//
//  NoteViewController.swift
//  Week4-project
//
//  Created by yeonsu on 2022/11/02.
//

import UIKit

class NoteViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var noteLabel: UITextView!
    
    public var noteTitle: String = ""
    public var note: String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        titleLabel.text = noteTitle
        noteLabel.text = note
    }
}

 

 

 

 

 

 

Cell을 왼쪽으로 슬라이드하면 나타나는 delete 버튼을 구현하는 코드이다.

 

 

 

 

최종 실행 화면

 

5주 차 미션은 어플리케이션을 실행할 때 나타나는 로딩 애니메이션을 Lottie로 구현했다!