application iOS de notes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
notes/Notes/NotesPageViewController.swift

121 lines
3.6 KiB

//
// NotesPageViewController.swift
// Notes
//
// Created by Laurent Morvillier on 16/10/2022.
//
import Foundation
import UIKit
class NotesPageViewController : UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
fileprivate var _notes: [Note] = []
override func viewDidLoad() {
super.viewDidLoad()
self._loadNotes()
let shareButton = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareHandler))
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addHandler))
self.navigationItem.rightBarButtonItems = [addButton, shareButton]
self.dataSource = self
self.delegate = self
if let note = self._notes.last {
let vc = self.viewController(note: note, index: self._notes.count - 1)
self.setViewControllers([vc], direction: .forward, animated: false)
}
}
fileprivate func _displayNote(note: Note) {
if let index = self._notes.firstIndex(of: note) {
let vc = self.viewController(note: note, index: index)
self.setViewControllers([vc], direction: .forward, animated: false)
} else {
print("note not found")
}
}
fileprivate func viewController(note: Note, index: Int) -> NoteViewController {
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "note") as? NoteViewController {
vc.note = note
vc.index = index
return vc
} else {
fatalError("error with storyboard")
}
}
fileprivate func _loadNotes() {
do {
self._notes = try Note.fetchByDate()
if self._notes.isEmpty {
self._createNote()
self._loadNotes()
}
} catch {
print("error = \(error)")
}
}
// MARK: - UIPageViewControllerDataSource
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vc = viewController as? NoteViewController else {
return nil
}
let previousIndex = vc.index - 1
if previousIndex < 0 {
return nil
}
let note = self._notes[previousIndex]
return self.viewController(note: note, index: previousIndex)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vc = viewController as? NoteViewController else {
return nil
}
let nextIndex = vc.index + 1
if nextIndex == self._notes.count {
return nil
}
let note = self._notes[nextIndex]
return self.viewController(note: note, index: nextIndex)
}
// MARK: - Business
@objc func shareHandler() {
guard let vc = self.presentedViewController as? NoteViewController, let text = vc.note?.content else {
return
}
let activityViewController = UIActivityViewController(activityItems: [text], applicationActivities: nil)
self.present(activityViewController, animated: true)
}
@objc func addHandler() {
self._createNote()
}
fileprivate func _createNote() {
let note = Note(context: AppDelegate.viewContext)
self._loadNotes()
self._displayNote(note: note)
}
}