본문 바로가기
아이폰 개발/Swift

swift - Custom TableViewController 예제

by 인생여희 2021. 3. 24.

swift - Custom TableViewController 예제

 

완성된 화면

 

 

 

스토리보드

 

 

 

[1] 데이터 모델

MemoData.swift

 

import Foundation
import UIKit

//AppDelegate.swift 파일을 열고 MemoData 타입의 변수를 프로퍼티로 정의합니다.

class MemoData{
    
    var memoIdx: Int?       //데이터 식별값
    var title:String?       //메모 제목
    var contents:String?     //메모 내용
    var image:UIImage?      //이미지
    var regdate:Date?       //작성일
    
    
}

 

 

[2] 커스텀 셀

MemoCell.swift

 

import UIKit

class MemoCell: UITableViewCell {

//글제목
@IBOutlet weak var subject: UILabel!
//글내용
@IBOutlet weak var contents: UILabel!
//날짜
@IBOutlet weak var regdate: UILabel!
//이미지
@IBOutlet weak var img: UIImageView!


}

 

[3]테이블뷰 

MemoListVC.swift

 

import UIKit
class MemoListVC: UITableViewController {
    
    //앱델리게이트 - 싱글톤
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

       print("MemoListVC - viewdidload")
    }
    
    
    //뷰가 화면에 출력되면 호출
    override func viewWillAppear(_ animated: Bool) {
        
        print("MemoListVC - viewWillAppear")
        
        //테이블 데이터 리로드
        self.tableView.reloadData()
    }
    

    //행 개수
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print("MemoListVC - numberOfRowsInSection : cnt : \(self.appDelegate.memolist.count)")
        
        
        return self.appDelegate.memolist.count
    }
    
    //개별행 구성
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        print("MemoListVC - cellForRowAt")
        
        //memolist 배열 안에서 주어진 행에 맞는 데이터 꺼냄
        let row = self.appDelegate.memolist[indexPath.row]
        
        //이미지 속성이 비어 있고 없고에 따라서 프로토타입 셀 식별자 설정
        let cellId = row.image == nil ? "memoCell" : "memoCellWithImage"
        
        print("cellId : \(cellId)")
        
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId) as! MemoCell
        
        //내용구성
        cell.subject?.text = row.title
        cell.contents?.text = row.contents
        cell.img?.image = row.image
        
        //Date 타입의 날짜를 포맷에 맞게 변경
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        cell.regdate?.text = formatter.string(from: row.regdate!)

        return cell
    }
    
    //테이블 행을 선택하면 호출되는 메소드
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("didselectRowAt...")
        
        //memolist 에서 선택된 행에 맞는 데이터 꺼냄
        let row = self.appDelegate.memolist[indexPath.row]
        
        //상세 화면 인스턴스 생성
        guard let vc = self.storyboard?.instantiateViewController(identifier: "MemoRead") as? MemoReadVC else {
            return
        }
        
        vc.param = row
        self.navigationController?.pushViewController(vc, animated: true)
    }
    
    
    @IBAction func showAccount(_ sender: Any) {
        
        print("계정보기")
        
        //ProfileVC.swift 호출 - >
        let uv = self.storyboard?.instantiateViewController(identifier: "_Profile")
        uv?.modalPresentationStyle = .fullScreen
        self.present(uv!, animated: true, completion: nil)
    }
    
}

 

 

 

MyMemory.zip
0.75MB