【发布时间】:2018-10-22 17:43:30
【问题描述】:
【问题讨论】:
-
在 NavigationController 中嵌入您的 ViewController。
标签: ios swift xcode navigationbar
【问题讨论】:
标签: ios swift xcode navigationbar
是的。有。
PageViewController.swift并粘贴下面的代码//
// Copyright © 2018 fewlinesofcode.com All rights reserved.
//
import UIKit
class PageViewController: UIPageViewController {
fileprivate(set) var currentPageIndex: Int = 0
var pages = [UIViewController]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let firstViewController = page(at: currentPageIndex) {
setViewControllers([firstViewController], direction: .forward, animated: false, completion: { completed in })
}
}
func resetIndex() { currentPageIndex = 0 }
func page(at index: Int) -> UIViewController? {
guard index >= 0 && index < pages.count else { return nil }
return pages[index]
}
}
extension PageViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let pageIndex = pages.index(of: viewController), currentPageIndex != 0 else {
return nil
}
currentPageIndex = pageIndex
currentPageIndex -= 1
return page(at: currentPageIndex)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let pageIndex = pages.index(of: viewController) else {
return nil
}
currentPageIndex = pageIndex + 1
if currentPageIndex == pages.count {
return nil
}
return page(at: currentPageIndex)
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return pages.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return currentPageIndex
}
}
extension PageViewController {
func showPrev(completion: ((Bool) -> Void)? = nil) {
guard currentPageIndex > 0 else { return }
currentPageIndex -= 1
setViewControllers([pages[currentPageIndex]], direction: .reverse, animated: true, completion: completion)
}
func showNext(completion: ((Bool) -> Void)? = nil) {
guard currentPageIndex < pages.count - 1 else { return }
currentPageIndex += 1
setViewControllers([pages[currentPageIndex]], direction: .forward, animated: true, completion: completion)
}
}
class ViewController: PageViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupChildViewControllers()
}
private func setupChildViewControllers() {
let vc1 = <Instantiate your VC 1>
let vc2 = <Instantiate your VC 2>
pages = [
vc1, vc2
]
}
}
只需将ViewController 嵌入UINavigationController。
【讨论】:
ViewController 代码(我的错),所以可能会出错
每个视图控制器都有自己的导航栏执行。唯一可行的方法是不要移动到另一个视图控制器,而是可以创建 UIView 的子类,并在单击该按钮时通过将其添加到基本视图控制器的子视图来呈现一个新的 UIView。
【讨论】: