swift UIImagePickerController 예제 feat : 메모 쓰기, 읽기
완성된 화면
스토리 보드
[1] 메모 쓰기 - 사진 버튼 클릭했을때 작동하는 로직
MemoFormVC.swift
import UIKit
//피커뷰 델리게이트 + TextViewDelegate 프로토콜 추가
class MemoFormVC: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate, UITextViewDelegate {
var subject:String! //메모 제목
//내용
@IBOutlet weak var contents: UITextView!
//이미지 미리보기
@IBOutlet weak var preview: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.contents.delegate = self
}
//저장
@IBAction func save(_ sender: Any) {
//내용을 입력하지 않은경우 경고
guard self.contents.text?.isEmpty == false else {
let alert = UIAlertController(title: nil, message: "내용을 입력해주세요", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: false, completion: nil)
return
}
//MemoData 객체를 생성하고 데이터담기
let data = MemoData()
data.title = self.subject
data.contents = self.contents.text
data.image = self.preview.image
data.regdate = Date()
//앱 델리게이트 객체를 읽어 온다음 memolist 배열에 MemoData 객체 추가
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.memolist.append(data)
self.navigationController?.popViewController(animated: true)
}
//사진버튼 클릭
@IBAction func pick(_ sender: Any) {
let picker = UIImagePickerController()
//이미지 피커 컨트롤러는 델리게이트 패턴 기반으로 동작합니다.
picker.delegate = self
picker.allowsEditing = true
//알림창 객체 생성
let alert = UIAlertController(title: nil, message: "이미지를 가져올 곳을 선택해주세요.", preferredStyle: .actionSheet)
//카메라
let camera = UIAlertAction(title: "카메라", style: .default) { (_) in
if UIImagePickerController.isSourceTypeAvailable(.camera){
picker.sourceType = .camera
//이미지 피커 화면에 표시
self.present(picker, animated: false, completion: nil)
}
}
//저장앨범
let savedAlbum = UIAlertAction(title: "저장앨범", style: .default) { (_) in
picker.sourceType = .savedPhotosAlbum
//이미지 피커 화면에 표시
self.present(picker, animated: false, completion: nil)
}
//사진 라이브러리
let photoLibray = UIAlertAction(title: "사진 라이브러리", style: .default) { (_) in
//이미지 피커 화면에 표시
self.present(picker, animated: false, completion: nil)
}
//취소
let cancel = UIAlertAction(title: "취소", style: .cancel, handler: nil)
//버튼을 컨트롤러에 등록
alert.addAction(camera)
alert.addAction(savedAlbum)
alert.addAction(photoLibray)
alert.addAction(cancel)
//알림창 실행
self.present(alert, animated: false, completion: nil)
}
// MARK:- 이미지 피커 델리게이트
//이미지 선택을 완료했을때 호출
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
//선택된 이미지를 미리보기에 표시
self.preview.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
//이미지 피커 컨트롤러 닫음
picker.dismiss(animated: false, completion: nil)
}
// MARK:- UITextViewDelegate
//텍스트 뷰의 내용이 변경될 때마다 호출됨
func textViewDidChange(_ textView: UITextView) {
//내용의 15자리까지 읽어 subject 변수에 저장
let contents = textView.text as NSString
let length = (contents.length > 15) ? 15 : contents.length
self.subject = contents.substring(with: NSRange(location: 0, length: length))
//네비게이션 타이틀에 표시
self.navigationItem.title = subject
}
}
[2] 메모 읽기
MemoReadVC.swift
import UIKit
class MemoReadVC: UIViewController {
//콘텐츠 데이터를 저장하는 변수
var param:MemoData?
@IBOutlet weak var subject: UILabel!
@IBOutlet weak var contents: UILabel!
@IBOutlet weak var img: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
//제목, 내용, 이미지 출력
self.subject.text = param?.title
self.contents.text = param?.contents
self.img.image = param?.image
//날짜 포캣 변환
let formatter = DateFormatter()
formatter.dateFormat = "dd일 HH:mm분에 작성됨"
let dateString = formatter.string(from: (param?.regdate)!)
//네비게이션 타이틀에 날짜 표시
self.navigationItem.title = dateString
}
}
'아이폰 개발 > Swift' 카테고리의 다른 글
swift - alert 커스터마이징 feat: 지도, 이미지, 테이블뷰, 슬라이더 (1) | 2021.03.25 |
---|---|
swift 계정 Profile 화면 디자인 예제 (0) | 2021.03.25 |
swift - Custom TableViewController 예제 (0) | 2021.03.24 |
swift get post 호출 예제 (0) | 2021.03.24 |
swift keyChain 예제 (0) | 2021.03.23 |