UIPageViewController 具有不同的 ViewController,正确的方法吗?

2023-11-26

基本上,我有一个表视图控制器和一个普通的视图控制器,我想这样做,以便我可以在视图控制器之间滑动,就像在应用程序的主屏幕上一样(显然是相同类型的视图控制器)。

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

但我试图在这个设置中获得不同的视图控制器。目前是 2 个,但肯定会增加到 4 个左右。

Is 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

我希望初始视图是表视图控制器(tvc),并且我希望后视图控制器(pvc)位于其左侧。我可以加载它并轻松地在两者之间滑动,但有时我可以比边界滑动得更远,所以基本上如果我从 tvc-->pvc-->tvc 开始,那么我可以通过向右滑动到同一个 tvc 然后进一步滑动到达边界或通过向左滑动进行最后一次转换,以其他方式 tvc-->pvc-->tvc-->pvc-->pvc。最终达到了界限。一旦应用程序最初在 tvc 启动,我就无法前进页面(这是应该发生的情况),如果我进入 tvc-->pvc 并尝试转到左侧的页面,它不会让我前进(这是应该发生的情况) )

Thanks


终于完成了,不必向不同的类添加任何属性。刚刚测试了班级。代码如下:

-(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;
}

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

谢谢你们的回复!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIPageViewController 具有不同的 ViewController,正确的方法吗? 的相关文章

随机推荐

  • 如何创建以用户名作为子域名的子域?

    我提到了其他相关问题 但我不清楚 请解释一下 如何在 PHP 中创建子域 例子 http www domainname com page php usname sundar 我想更改此链接 http sundar domainname co
  • Google Play 开发者控制台与 Crashlytics 控制台中的崩溃

    我们在 Google Play 商店中有一个 Android 应用程序 应用程序的崩溃和 ANR 部分仅列出了少数几个最严重的崩溃 而我们的 Crashlytics 控制台列出了一组完全不同的崩溃 我的意思是 Crashlytics 中只有
  • Beautiful Soup 4 find_all 找不到 Beautiful Soup 3 找到的链接

    我注意到一个非常烦人的错误 BeautifulSoup4 包 bs4 经常会发现比以前版本更少的标签 包 BeautifulSoup 这是该问题的一个可重现的实例 import requests import bs4 import Beau
  • Java JIT 循环展开策略?

    JIT 的循环展开策略是什么 或者 如果没有简单的答案 那么有什么方法可以检查在循环中何时 何地执行循环展开 GNode child null for int i 0 i lt 8 i child octree getNeighbor nn
  • 用于选择 div 内文本的 css 类选择器

    我有一个类名为 test 的 div 类 test 有一个分配给它的光标指针 该类也有 200px 的固定宽度 div 内部的文本长度小于 div 的宽度 我不希望当鼠标放在div的空白部分时出现该点 有没有一种方法可以将 css 指针分配
  • 在 select 元素中触发 Change 事件和 keyup 事件

    我有一些代码应该在选择元素更改时运行 我用 jquery 这样做 myselect change function 但我希望当用户使用关键字箭头更改选择时也运行这些代码 我发现用于此目的的事件是 keyup 所以将会是 myselect k
  • Java Swing 中的弹出窗口

    有人可以建议我如何在 Java Swing 中实现弹出窗口吗 我希望弹出窗口是模式窗口 弹出窗口打开时用户无法返回主窗口 我尝试使用 JDialog 来完成此操作 但它只允许一个用于用户输入的小部件 而我需要多个小部件 我在这里可能是错的
  • Angular 2,如何使用 queryParams 将数组传递到路由器

    Angular 2 有没有办法获取这种 URL http example com the route param value1 param value2 param value3 我正在尝试做它应该做的事情 使用queryParams与Ro
  • java - 具有 int 范围的 switch 语句

    我想使用 switch 语句来检查一系列数字 我发现一些地方说类似case 1 5 or case score gt 120 score lt 125 会起作用 但我只是不知何故不断出错 我想要的是 如果数字在 1600 1699 之间 则
  • 无法在 Angular 4.3 中使用 HttpInterceptor 进行缓存

    我正在尝试实施HttpRequest缓存使用HttpInterceptor根据 Angular 4 3 的文档 但我收到错误 这是我的代码 缓存 interceptor ts import HttpRequest HttpResponse
  • C++ 中令人困惑的尖括号

    我从 c 转向 c 熟悉语法 但我刚刚遇到了语法不熟悉的代码 int main std shared ptr lt CommonAPI Runtime gt runtime CommonAPI Runtime get std shared
  • 如何在Android Studio中正确使用postDelayed()?

    我有一个 countDownTimer 如果用户在第 12 秒内没有点击 gameButton 我希望调用 gameOver 方法 问题在于 当 countDownTimer 为 12 时 游戏函数会立即被调用 或者计时器会继续倒计时 所以
  • TLD 可能有多长?

    我正在 PHP 中开发电子邮件验证正则表达式 我需要知道 TLD 可能持续多长时间并且仍然有效 我做了一些搜索 但找不到有关该主题的太多信息 那么 TLD 可能有多长 DNS 允许单个标签最多使用 63 个字符
  • QuickBooks QBFC 说明

    QBFC是什么 将第三方程序的发票和采购订单过帐到 QuickBooks 时如何运作 我应该将哪个 QBFC 版本与 QuickBooks 2008 一起使用 我只是想知道QBFC是什么 它是一个 COM 库 构建 QuickBooks 可
  • Electron v1.7:关闭、最大化和最大化

    我正在尝试构建一个具有关闭 最大化和最小化按钮的简单应用程序 该应用程序的问题是 关闭 最大化 和 最小化 无法正常工作 这console log 单击按钮时 它可以正常运行并显示正确的消息 但是 它不会执行实际的关闭 最大化和最小化操作
  • 跨平台 numpy.random.seed()

    The docs say 兼容性保证 固定的种子和固定的调用系列 使用相同参数的 RandomState 方法总是会产生 舍入误差的结果相同 除非这些值是 不正确 错误的值将被修复 NumPy 版本将在 进行了哪些修复将在相关文档字符串中注
  • django.db.utils.ProgrammingError:无法将类型 uuid 转换为整数

    我尝试将我的网站上传到 Heroku 服务器并陷入这个问题 当我尝试迁移数据库时出现错误 上述异常是导致以下异常的直接原因 return self cursor execute sql params File app heroku pyth
  • iframe Safari 中的跨域 cookie

    我在 iframe 从另一个域加载站点 中设置 cookie 时遇到问题 在我的网站 X COM 上我加载 Y COM 尝试设置 cookie 但 Safari 阻止了它们 因为之前没有访问过该网站 因此加载 Y COM 失败 因为没有 c
  • 谷歌地图API绘制带有编码点的折线

    我是 javascript 和 Google 地图 api 的新手 所以我编码了这样的点 yzocFzynhVq n o nzD 并尝试用它绘制折线 我还没有找到主题或文档来解决我的问题 关于如何解码它的主题很少 但我不需要这样做 我只需要
  • UIPageViewController 具有不同的 ViewController,正确的方法吗?

    基本上 我有一个表视图控制器和一个普通的视图控制器 我想这样做 以便我可以在视图控制器之间滑动 就像在应用程序的主屏幕上一样 显然是相同类型的视图控制器 但我发现的是UIpageviewcontroller通常当您有同一类型的多个视图时使用