Ios UIPageViewController调用ViewControllerBeforReviewController和viewControllerAfterViewController
我见过关于stackoverflow的类似问题(如和),但没有一个有明确的答案。我遵循了这一点,但为我想要显示的每个页面创建了一个单独的UIViewController文件,其中包含自己的.xib。在第一次滑动时,调用Ios UIPageViewController调用ViewControllerBeforReviewController和viewControllerAfterViewController,ios,Ios,我见过关于stackoverflow的类似问题(如和),但没有一个有明确的答案。我遵循了这一点,但为我想要显示的每个页面创建了一个单独的UIViewController文件,其中包含自己的.xib。在第一次滑动时,调用viewControllerBeforeViewController和viewControllerAfterViewController。本教程使用这两种方法来增加或减少pageIndex。因此,我最终看到的是pageIndex初始化为0,然后在调用viewControllerAf
viewControllerBeforeViewController
和viewControllerAfterViewController
。本教程使用这两种方法来增加或减少pageIndex
。因此,我最终看到的是pageIndex
初始化为0,然后在调用viewControllerAfterViewController
时设置为1,然后在调用viewControllerBeforeViewController
时立即设置为0。最终,这会导致页面显示不正确 这是我处理这件事的方法
在每个页面视图控制器中,我创建了一个名为index
的readonly
属性,我在其实现中将该属性指定为相关值(例如,1、2或3)。
然后我做了这个:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSInteger pageIndex = 0;
if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
pageIndex = mainMenuPage0ViewController.index;
pageIndex--;
} else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
pageIndex = mainMenuPage1ViewController.index;
pageIndex--;
} else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
pageIndex = mainMenuPage2ViewController.index;
pageIndex--;
}
if (pageIndex < 0) {
return nil;
}
return [self viewControllerAtIndex:pageIndex];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSInteger pageIndex = 0;
if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
pageIndex = mainMenuPage0ViewController.index;
pageIndex++;
} else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
pageIndex = mainMenuPage1ViewController.index;
pageIndex++;
} else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
pageIndex = mainMenuPage2ViewController.index;
pageIndex++;
}
if (pageIndex == 3) {
return nil;
}
return [self viewControllerAtIndex:pageIndex];
}
-(UIViewController*)页面视图控制器:(UIPageViewController*)页面视图控制器视图控制器预览控制器:(UIViewController*)视图控制器
{
NSInteger-pageIndex=0;
if([viewController是类的种类:[MainMenuPage0ViewController类]]){
MainMenuPage0ViewController*MainMenuPage0ViewController=(MainMenuPage0ViewController*)viewController;
pageIndex=mainMenuPage0ViewController.index;
页面索引--;
}else if([viewController是类的种类:[MainMenuPage1ViewController类]]){
MainMenuPage1ViewController*MainMenuPage1ViewController=(MainMenuPage1ViewController*)viewController;
pageIndex=mainMenuPage1ViewController.index;
页面索引--;
}else if([viewController是类的种类:[MainMenuPage2ViewController类]]){
MainMenuPage2ViewController*MainMenuPage2ViewController=(MainMenuPage2ViewController*)viewController;
pageIndex=mainMenuPage2ViewController.index;
页面索引--;
}
如果(页面索引<0){
返回零;
}
返回[self-viewControllerAtIndex:pageIndex];
}
-(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)viewController
{
NSInteger-pageIndex=0;
if([viewController是类的种类:[MainMenuPage0ViewController类]]){
MainMenuPage0ViewController*MainMenuPage0ViewController=(MainMenuPage0ViewController*)viewController;
pageIndex=mainMenuPage0ViewController.index;
pageIndex++;
}else if([viewController是类的种类:[MainMenuPage1ViewController类]]){
MainMenuPage1ViewController*MainMenuPage1ViewController=(MainMenuPage1ViewController*)viewController;
pageIndex=mainMenuPage1ViewController.index;
pageIndex++;
}else if([viewController是类的种类:[MainMenuPage2ViewController类]]){
MainMenuPage2ViewController*MainMenuPage2ViewController=(MainMenuPage2ViewController*)viewController;
pageIndex=mainMenuPage2ViewController.index;
pageIndex++;
}
如果(pageIndex==3){
返回零;
}
返回[self-viewControllerAtIndex:pageIndex];
}
我认为它可以像下面那样简化。没有必要有这么多的if/else。关键是要理解,我们只需要在新索引有效时计算它,即如果它介于0和页数之间:
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == 0 || index == NSNotFound) {
return nil;
}
index = index - 1;
return getViewControllerAtIndex(index: index)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == NSNotFound || index == providersList.count - 1) {
return nil
}
index = index + 1;
return getViewControllerAtIndex(index: index)
}
return nil
}
我已经有几年没有在iOS上工作了,也没有时间学习swift。应该是相当直接可译的。