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