반응형
//
//  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)
        }
    }

    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
    }
    

    

}
//
//  ComposeViewController.swift
//  NhMemo
//


import UIKit

class ComposeViewController: UIViewController {

    //cancel 버튼 연결
    @IBAction func close(_ sender: Any) {
        //첫번째 파라미터 : true전달 시, 실행
        //두번째 파라미터 : 어떤 함수를 실행시키고 싶을 때, 클로저로 
        dismiss(animated: true, completion: nil)
    }
    
    //textView 저장을 위한 연결
    @IBOutlet weak var memoTextview: UITextView!
    
    //save 버튼 연결
    @IBAction func save(_ sender: Any) {
        
        //저장 버튼 클릭 시, memo안에 텍스트 저장 및 조건문 
        guard let memo = memoTextview.text,
              memo.count > 0 else {
                  //확장클래스 가져옴. 사용자가 메모를 입력하지 않을 시, 경고창 뜸
                  alert(message: "메모를 입력하세요.")
                  return
              }
        //guard 다음에 실행 됨.
        let newMemo = Memo(content: memo)
        //메모 저장
        Memo.dummyMemoList.append(newMemo)
        
        //화면 닫기 전, notification 전달 (update를 위한 전달 broadcast)
        NotificationCenter.default.post(name: ComposeViewController.newMemoDidInsert, object: nil)
        
        //창 닫음
        dismiss(animated: true, completion: nil)
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        
    
    }

    

}

extension ComposeViewController {
    //notification : 이름으로 구분
    static let newMemoDidInsert = Notification.Name(rawValue: "newMemoDidInsert")
}
반응형

+ Recent posts