parent
514794f91d
commit
e73305ba59
@ -0,0 +1,121 @@ |
|||||||
|
// |
||||||
|
// 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) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue