반응형
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 클릭!
//
// 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()
}
}
}
반응형
'개발언어 > Swift' 카테고리의 다른 글
스위프트 메모장 만들기 7 (DB 연동) (0) | 2022.01.02 |
---|---|
스위프트 메모장 만들기 7 (줄 바꿈 기능) (0) | 2022.01.01 |
스위프트 메모장 만들기 5 (메모 보기 화면 ) (0) | 2021.12.29 |
스위프트 메모장 만들기 4 (시트 메모 notification update) (0) | 2021.12.22 |
the app delegate must implement the window property if it wants to use a main storyboard file (0) | 2021.12.22 |