반응형

1. table view에 table view cell를 드래그해서 추가해준다.

1-1. sytle옵션을 basic으로 변경해준다.
1-2. idenrifier을 추가해준다.

 

2. tableview를 클릭한 후 attribute옵션의 prototype cells를 2로 바꾼다.(date 추가를 위해 )

2-1. 새로 추가 된, cell의 identifier을 입력해준다 (여기서는 dateCell이라 하였다.)

2-2. dataSource연결을 위해 table view를 클릭 후 ctrl키를 누른 상태에서 아래의 버튼을 연결해준다 그리고 datasource 클릭!

datasource

//
//  MemoListTableViewController.swift
//  NhMemo
//


import UIKit

class MemoListTableViewController: UITableViewController {
    
    //날짜 포맷 (클로저 사용)
    let formatDate:DateFormatter = {
       let f = DateFormatter()
        f.dateStyle = .long //long으로 출력
        f.timeStyle = .short
        f.locale = Locale(identifier: "Ko_kr") //한글로 변경
        return f
    }()
    
    
    //view가 화면에 표시되기전에 실행 됨. 음.. 안드로이드로 치면,, onCreate?
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
      
    }
    
    var token: NSObjectProtocol?
    //옵저버 해제
    deinit {
        if let token = token {
            NotificationCenter.default.removeObserver(token)
        }
    }
    
    //세그웨이에 연결된 화면을 생성하고, 화면을 전환하기 직전에 호출 됨. sender을 활용! (몇번째 cell을 클릭했는지 계산해야함.)
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let cell = sender as? UITableViewCell,
           let indexPath = tableView.indexPath(for: cell) { // 몇번째 cell인지 확인 할 수 있음.
            //목록화면과 보기화면 접근 가능.
            //segue를 실행하는 화면을 source라고 함, 새롭게 표시되는 화면을 destination이라고 함.
            //타입 캐스팅 해야 함.
            if let vc = segue.destination as? DetailViewController {
                vc.memo = Memo.dummyMemoList[indexPath.row]
            }
            
            
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //notification, queue : ui업데이트 메인쓰레드, 4번째 파라미터에 전달된 클로저가 3번째 파라미터에 전달되어 실행됨.
        //옵저버 해제 안하면 메모리 낭비!!
        token = NotificationCenter.default.addObserver(forName: ComposeViewController.newMemoDidInsert, object: nil, queue: OperationQueue.main)
        { [weak self] (noti) in
            //테이블 뷰 리로드
            self?.tableView.reloadData()
        }
       
    }

    // MARK: - Table view data source


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return Memo.dummyMemoList.count
    }

    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        // Configure the cell...
        let target = Memo.dummyMemoList[indexPath.row]
        cell.textLabel?.text = target.content
        cell.detailTextLabel?.text = formatDate.string(from: target.insertDate)

        return cell
    }
    

    

}
//
//  DetailViewController.swift
//  NhMemo
//

import UIKit

class DetailViewController: UIViewController {

    
    //memoListTableViewController에서 저장
    var memo: Memo?
    
    //날짜 포맷 (클로저 사용)
    let formatDate:DateFormatter = {
       let f = DateFormatter()
        f.dateStyle = .long //long으로 출력
        f.timeStyle = .short
        f.locale = Locale(identifier: "Ko_kr") //한글로 변경
        return f
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()

       
    }
    

 

}

//1. datastore 연결
extension DetailViewController:
    UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            //리턴할 cell의 개수
            return 2
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            // 테이블 뷰가 어떤 셀을 호출할지 물어보는 메소드
            switch indexPath.row {
            case 0:
                //memeCell 가져오기
                let cell = tableView.dequeueReusableCell(withIdentifier: "memoCell", for: indexPath)
                
                cell.textLabel?.text = memo?.content
                
                return cell
            case 1:
                //dateCell 가져오기
                let cell = tableView.dequeueReusableCell(withIdentifier: "dateCell", for: indexPath)
                
                //옵셔널 값을 전달 할 수 없음. 그래서 string for 메소드를 사용.
                cell.textLabel?.text = formatDate.string(for: memo?.insertDate)
                
                return cell
            default:
                fatalError()
            }
        }
        
        
    }
반응형

+ Recent posts