diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 38c51c74f..0599c7d14 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -268,14 +268,18 @@ extension ArticleViewController: WebViewControllerDelegate { extension ArticleViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { - guard let article = coordinator.prevArticle else { + guard let webViewController = viewController as? WebViewController, + let currentArticle = webViewController.article, + let article = coordinator.findPrevArticle(currentArticle) else { return nil } return createWebViewController(article) } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { - guard let article = coordinator.nextArticle else { + guard let webViewController = viewController as? WebViewController, + let currentArticle = webViewController.article, + let article = coordinator.findNextArticle(currentArticle) else { return nil } return createWebViewController(article) diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 249ed48d0..5d737cbfd 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -825,6 +825,20 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } + func findPrevArticle(_ article: Article) -> Article? { + guard let index = articles.firstIndex(of: article), index > 0 else { + return nil + } + return articles[index - 1] + } + + func findNextArticle(_ article: Article) -> Article? { + guard let index = articles.firstIndex(of: article), index + 1 != articles.count else { + return nil + } + return articles[index + 1] + } + func selectPrevArticle() { if let article = prevArticle { selectArticle(article)