상세 컨텐츠

본문 제목

MVC패턴 적용해보기 / MVC패턴에서 UITableView 사용해보기

본문

MVC패턴 적용해보기

Model 

  • pokeDatas.wift : Api 받아오는 파일 
  • ContactsDataClass.swift
  • ContactsDataPropertiesClass.swift 

 

view 

  • PhoneBookView.swift : 친구 목록 표시 
  • UpdatePhoneBookView .swift : 연락처 추가 및 수정 뷰
  • PhonBookTableViewCell.swift : 연락처 목록의 셀 정의 

 

Controller 

  • UpdatePhoneBookViewController.swift : 연락처 추가 및 수정 
  • PhoneBookViewController.swift  : 연락처 목록을 관리하는 뷰 컨트롤러
    추가 버튼 눌렀을 때 -> 연락처 편집 및 추가
    친구 목록에서 눌렀을 때도 이쪽으로 이동 -> 이미지, 이름, 전호번호 입력된 상태로 화면 띄우기
    상단 네비게이션 바의 타이틀 : 해당 연락처의 이름

SceneDelegate.swift

UINavigationController를 사용해서 앱 실행 시 처음 보여지는 컨트롤러 설정.

 

 

 

ViewController의 라이프사이클을 공부했을 때, 공식문서에서

loadView에서는 view 객체를 직접 코딩해서 만드는 경우가 아니라면

override를 지양(must not)한다고 한다. 

그래서 왠만하면 loadView에는 사용하지 말아야겠다고 생각했다. 

근데 이번에 과제를 하다가 loadView에 작성하신 분들이 있어 코드리뷰를 해봤는데, 

내가 놓친 부분이 있었다. 

 

바로 view 객체를 직접 코딩해서 만드는 경우

23번 코드부터 보면 내가 해준 것이 바로 view 객체를 만들어서 직접 코딩해준 것....ㅋ

그리고 뷰와 함께 추가적으로 이니셜라이저를 하고 싶다면, viewDidLoad 에서 하라고 한다.

 

 

🔗 https://bicycleforthemind.tistory.com/33

 

 

 

 

 

 

PhoneBookView.swift

import UIKit
import SnapKit

class PhoneBookView: UIView {
    
    let tableView: UITableView = {
        let tableView = UITableView()
        tableView.register(PhonBookTableViewCell.self, forCellReuseIdentifier: "PhonBookTableViewCell")  //셀 등록
        return tableView
    }()
    
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        configureUI()
    }
    
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func configureUI() {
        self.backgroundColor = .white
        
        self.addSubview(tableView)
        
        tableView.snp.makeConstraints {
            $0.leading.trailing.equalToSuperview().inset(10)
            $0.top.bottom.equalToSuperview()
        }
    }
    
}

 

 

 

 

관련글 더보기