ios - 如何在 swift 中使用 UIPageViewController 中的下一个和上一个按钮功能
问题描述
我使用了 UIPageViewController,我的代码如下。
class HomeViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
private var pageViewModel :PageViewModel!
init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : Any]? = nil, withViewModel viewModel:PageViewModel) {
super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: options)
pageViewModel = viewModel
print(pageViewModel.datasourceModel.dataListArray)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
l!
var pageControl = UIPageControl()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
createPageViewController()
self.pageControl.pageIndicatorTintColor = UIColor(red: 0.74, green: 0.69, blue: 0.78, alpha:1.0)
self.pageControl.currentPageIndicatorTintColor = UIColor(red: 0.62, green: 0.31, blue: 0.82, alpha:1.0)
self.pageControl.backgroundColor = UIColor(red: 0.93, green: 0.86, blue: 1, alpha:1.0)
self.pageControl.numberOfPages = pageViewModel.datasourceModel.dataListArray! .count
print(self.pageControl.numberOfPages)
self.view.addSubview(pageControl)
}
fileprivate func createPageViewController() {
if (pageViewModel.datasourceModel.dataListArray?.count)! > 0 {
let firstController = getItemController(0)!
let startingViewControllers = [firstController]
self.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
}
}
fileprivate func setupPageControl() {
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let itemController = viewController as! HomeController
if itemController.itemIndex > 0 {
return getItemController(itemController.itemIndex-1)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
print(pageViewController)
let itemController = viewController as! HomeController
if itemController.itemIndex+1 < (pageViewModel.datasourceModel.dataListArray?.count)! {
return getItemController(itemController.itemIndex+1)
}
return nil
}
//fileprivate
func getItemController(_ itemIndex: Int) -> HomeController? {
if itemIndex < (pageViewModel.datasourceModel.dataListArray?.count)! {
let homeViewModel :HomeViewModel = HomeViewModel(withmodel:pageViewModel.datafordisplay(objectatindex: itemIndex))
let ViewController = HomeController(nibName: "HomeController", bundle: nil, withViewModel: homeViewModel)
ViewController.itemIndex = itemIndex
return ViewController
}
return nil
}
func getItemController1(_ itemIndex: Int) {
if itemIndex < (pageViewModel.datasourceModel.dataListArray?.count)! {
let homeViewModel :HomeViewModel = HomeViewModel(withmodel:pageViewModel.datafordisplay(objectatindex: itemIndex))
let ViewController = HomeController(nibName: "HomeController", bundle: nil, withViewModel: homeViewModel)
ViewController.itemindex1 = itemIndex
print(ViewController.itemindex1)
// pageViewController(homeViewModel, viewControllerAfter: ViewController.itemindex1)
}
}
func currentControllerIndex() -> Int {
let pageItemController = self.currentController()
if let controller = pageItemController as? HomeController{
print(controller.itemIndex)
return controller.itemIndex
}
return -1
}
func currentController() -> UIViewController? {
if (self.viewControllers?.count)! > 0 {
return self.viewControllers![0]
}
return nil
}
func pageViewController(
_ pageViewController: UIPageViewController,
willTransitionTo pendingViewControllers:[UIViewController]){
if let itemController = pendingViewControllers[0] as? HomeController {
self.pageControl.currentPage = itemController.itemIndex
}
}
}
和 HomeController 如下: -
class HomeController: UIViewController ,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate{
var itemIndex: Int = 0
var i = 0
var j = 0
var k = 0
var itemindex1 : Int = 0
@IBOutlet weak var name: UITextField!
private var homeViewModel :HomeViewModel!
@IBOutlet weak var tableview1: UITableView!
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, withViewModel viewModel:HomeViewModel) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
homeViewModel = viewModel
}
@IBOutlet weak var screen3: UIView!
@IBOutlet weak var screen1: UIView!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
name.delegate = self
if itemIndex == 0{
screen1.isHidden = false
tableview1.isHidden = true
screen3.isHidden = true
}
else if itemIndex == 1{
screen1.isHidden = true
tableview1.isHidden = false
screen3.isHidden = true
}
else if itemIndex == 2{
screen1.isHidden = true
tableview1.isHidden = true
screen3.isHidden = false
submitbutton.isHidden = false
}
// self.restaurantname.text = homeViewModel.homeModel.name
// Do any additional setup after loading the view.
}
func textFieldDidEndEditing(_ textField: UITextField) {
}
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return true;
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
// tableView.reloadData()
return true;
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
let names = name.text
self.homeViewModel.name = names
self.homeViewModel.isValidInput(Input:self.homeViewModel.name!)
*/
return true;
}
/*
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
*/
return true
}
*/
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder();
name.resignFirstResponder()
return true;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这里我有 1 个 UIViewController。在 UIViewController 里面我有
2 UIView 和 1 tableview。名称是 screen1 和 screen3 是 UIView 和一个 tableview 。
在这里,根据编码,我使用 UIPageViewController 滚动视图。
现在我需要 UIPageViewController 中的两个按钮作为下一个和上一个按钮。所以当我单击下一个按钮时,我需要滚动视图并且它应该显示 tableview。再次在下一个按钮上它应该滚动到屏幕 3。如何做UIPageControl 也应该移动。如何解决。
而对于上一个按钮功能相同但向后。怎么办?
解决方案
推荐阅读
- python - 在类别数组上细分ndarray
- java - Java Socket 不允许摆动框架出现
- java - 抛出异常以强制退出递归有效吗?
- visual-studio-code - 在 VS Code 中创建新文件的替代方法?
- postgresql - 首先尝试更新的 INSERT ... ON CONFLICT 相当于什么?
- prism - Fluent.Ribbon 的 RegionAdapter
- python - 如何修复部署在 AWS EC2 中但 CSS 和照片不起作用的 Django 项目
- python - PyTorch 数据集:ImageFolder 和子文件夹过滤
- javascript - 为什么值为空?
- javascript - 如何让 MongoDB 将数字识别为双精度数?