gpt4 book ai didi

ios - UIPageViewController 与不同的 ViewControllers,正确的方式?

转载 作者:可可西里 更新时间:2023-11-01 05:05:44 25 4
gpt4 key购买 nike

基本上,我有一个 Table View Controller 和一个普通的 View Controller,我想制作它以便我可以像在应用程序的主屏幕上那样在 View Controller 之间滑动(显然是相同类型的 View Controller)。

但我发现的是 UIpageviewcontroller 通常在您有多个相同类型的 viewcontroller View 时使用,例如在图片之间滑动,您可以只在类中设置索引和与索引相关的图像数组,并以这种方式进行设置。

但我正在尝试在此设置中获得不同的 View Controller 。现在是两个,但肯定会增加到大约 4 个。

UIPageViewController 是正确的设置方式还是其他方式。

编辑:下面添加的代码

    //
// ViewController.m
// testb
//
#import "MainPostController.h"
#import "MainTableViewController.h"
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize pageViewController;
@synthesize indexValue = _indexValue;

- (void)viewDidLoad
{
[super viewDidLoad];
self.indexValue= 1;
NSLog(@"main intitated");

// Do any additional setup after loading the view, typically from a nib.
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
self.pageViewController.dataSource = self;

MainTableViewController *tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTableViewController"];
MainPostController *pvc;
NSArray *viewcontrollers =[NSArray arrayWithObjects:tvc, pvc, nil];

[self.pageViewController setViewControllers:viewcontrollers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30);

[self addChildViewController:pageViewController];
[self.view addSubview:pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}




-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
if (self.indexValue == 1) {
MainPostController *pvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainPostController"];
self.indexValue = 0 ;
return pvc;

}
else return nil;




}

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{

if (self.indexValue == 0) {
MainTableViewController *tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTableViewController"];
self.indexValue = 1;
return tvc;

}
else return nil;


}
@end

我希望初始 View 是 TableView Controller (tvc),我希望后 View Controller (pvc) 位于其左侧。我可以加载它并轻松地在两者之间滑动,但有时我可以滑动得比边界更远,所以基本上如果我从 tvc-->pvc-->tvc 开始,那么我可以通过向右滑动到同一个 tvc 然后到达边界或通过向左滑动最后一个过渡以另一种方式 tvc-->pvc-->tvc-->pvc-->pvc。边界最终到达。一旦应用程序最初在 tvc 启动,我就无法前进一个页面,(这是应该发生的),如果我去 tvc-->pvc 并尝试转到左侧的页面,它不会让我(这是应该发生的) )

谢谢

最佳答案

终于完成了,不必向不同的类添加任何属性。刚刚测试了类(class)。继承人的代码:

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
if ([viewController isKindOfClass:[MainTableViewController class]]) {
MainPostController *pvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainPostController"];
return pvc;

}

else return nil;

}


-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{

if ([viewController isKindOfClass:[MainPostController class]]) {
MainTableViewController *tvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainTableViewController"];
return tvc;

}
else return nil;
}

添加更多 View Controller 应该很容易,因为我只需要添加 else if 语句来测试它们。主要的问题解决方法是 isKindOfClass 方法:

谢谢大家的回复!

关于ios - UIPageViewController 与不同的 ViewControllers,正确的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com