UIkit- 10

김정현·2023년 6월 23일
0

To do App

우선 첫번 째로, 앱을 생성할 때 core data 체크를 반드시 해야한다.

상단 타이틀을 만들기 위해서
xcode 상단 Editor -> Embed in -> navigator controller 을 생성한다.

그런데 강의영상과는 다르게 IOS버전이 업데이트되며 바 자체는 사라진듯하다.

스토리보드에서 테이블 뷰, 테이블 뷰 셀,라벨, uiview 등을 추가한 후, 테이블 뷰 셀을 다룰 클래스를 따로 생성해준다.

그리고 각각 IBoutlet으로 입력한다.

import UIKit

class ToDoCell: UITableViewCell {

    @IBOutlet weak var topTitleLabel: UILabel!
    
    @IBOutlet weak var dateLavel: UILabel!
    
    @IBOutlet weak var prioirtyView: UIView!
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

}

테이블 뷰는 메인 쪽에서 입력하고,

override func viewDidLoad() {
        super.viewDidLoad()
    
        self.title = "To Do List"
        self.makeNAvigationBar()
        
        todotableview.delegate = self
        todotableview.dataSource = self
       

    }

    func makeNAvigationBar() {
        let item = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addNewTodo))
        item.tintColor = .black
        navigationItem.rightBarButtonItem = item
       
        //상단 바가 IOS업데이트에 따라 사라진듯 하다.
        /*let barAppearance = UINavigationBarAppearance()
        barAppearance.backgroundColor = .blue.withAlphaComponent(0.2)
        self.navigationController?.navigationBar.standardAppearance = barAppearance*/
    }
    @objc func addNewTodo() {
        
    }
}

타이틀 변경 및 타이틀 우측 +버튼을 생성해주는 것을 만들어 준다.

테이블 뷰에는 기본 설정이 있는데 우선

		todotableview.delegate = self
        todotableview.dataSource = self

이것과 익스텐션에

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell", for: indexPath)
        return cell
    }
    
    
}

이런식으로 cell 의 갯수와 .dequeueReusableCell을 통한 cell에 뿌려줄 내용들이다.

Coredata를 추가했다면 AppDelegate에서 persistentContainer등 사용할 수 있다.
우선
Data Model에서

필요한 요소들을 추가해주고
메인 뷰 컨트롤러에서 import CoreData을 준수한다.

let appdelegate = UIApplication.shared.delegate as! AppDelegate

이렇게 appdelegate를 타입캐스팅해서 인스턴스화 시키고

func fetchData(){
            let fetchRequest: NSFetchRequest<TodoList> = TodoList.fetchRequest()  //엔티티 이름으로 호출
            let context = appdelegate.persistentContainer.viewContext
            
            do{
                self.todoList = try context.fetch(fetchRequest)
            }catch{
                print(error)
            }
        }

앞서 설정한 엔티티 이름을 통해 context를 저장할 수 있다.

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.todoList.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell", for: indexPath) as! ToDoCell
        
        cell.topTitleLabel.text = todoList[indexPath.row].title
        if let hasDate = todoList[indexPath.row].date {
            let formatter = DateFormatter()
            formatter.dateFormat = "MM-dd hh:mm:ss"
            let dateString = formatter.string(from: hasDate)
            
            cell.dateLavel.text = dateString
        }else{
            cell.dateLavel.text = ""
        }
        return cell
    }
    
    
}

익스텐션에 이렇게 설정해주면 기본적인 데이터를 뿌려주는 형태는 됐으나, 아무것도 저장되어있지 않기때문에 출력은 되지 않는다.

0개의 댓글