반응형
//
// 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")
}
반응형
'개발언어 > Swift' 카테고리의 다른 글
스위프트 메모장 만들기 6 (목록화면 to 보기화면) (0) | 2021.12.31 |
---|---|
스위프트 메모장 만들기 5 (메모 보기 화면 ) (0) | 2021.12.29 |
the app delegate must implement the window property if it wants to use a main storyboard file (0) | 2021.12.22 |
스위프트 메모장 만들기 3 (0) | 2021.12.22 |
스위프트 메모장 만들기 2 (0) | 2021.12.17 |