• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何根据 PageViewController 更改按钮的操作?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:05:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

简介

Hello world,我是 Objective C 的新手,我一直在尝试使用 PageViewController。我在制作这个应用程序时遇到的一个问题是根据 PageViewController 更改按钮的操作。我已经通过多种方式处理了这种情况。

情况

我试图制作一个 PageViewController 来帮助玩家为游戏选择主题,但为了做到这一点,我需要弄清楚这个问题的答案。我关注了这个 tutorial除了我去掉了 startWalkthrough 按钮,因为它是不必要的,我更改了 self.pageViewController.view = CGRectMake(0, 100, self.view.frame.size.width, self. view.frame.size.height - 200); 以及改变 NSArray _pageTitles = @[@"Theme 1", @"Theme 2", @"Theme 3", @"Theme 4 "]; 在主视图 Controller 上为按钮等留出更多空间。

我制作了一个新按钮 (chooseButton) 和一个标签 (themeTitles) 仅作为示例来检查应用程序是否意识到它在主界面上是哪个主题 View Controller 。我尝试使用以下代码行:

- (IBAction)chooseButtonid)sender {
    if () {
    _themeTitles.text = @"You chose theme 1";
    }

    if () {
    _themeTitles.text = @"You chose theme 2";
    }

    if () {
    _themeTitles.text = @"You chose theme 3";
    }

    if () {
    _themeTitles.text = @"You chose theme 4";
    }
}

您可能会注意到条件为空白。这是我尝试过各种事情的部分。这可能包括使用其他头文件中的属性,或在其自己的头文件中声明的属性,例如声明 PageContentViewController *pageContentViewController; 然后说 if (pageContentViewController.pageIndex == 0) 以此类推,直到等于 3,或者说 if (pageContentViewController.titleText isEqual: @"Theme 1").

我还尝试在导入 AppDelegate *appDelegate; 之后声明它,并将 UIPageControl 作为属性公开,并创建 currentPage属性说 if (AppDelegate.pageControl.currentPage == 0) 等等。

我会发疯地用尽每个选项,而他们最终都会在界面上显示“你选择了主题 1”,为它所在的每个当前页面或根本不显示任何内容。

归根结底,关键是,我可以在 if 语句中加入什么条件才能让这件事发挥作用?



Best Answer-推荐答案


UIPageViewController 没有页码的原生概念。它可以告诉您当前在 viewControllers 属性中可见哪些 View Controller ,但您的工作是将它们映射到页面。

为什么?想象一本很大很大的书,其中每个页面都是一个 View Controller 。将所有这些都保存在内存中会很浪费(就像 UINavigationController 保存在当前堆栈中的方式一样)。所以 UIPageViewController 使页面数组是虚拟的,只向你的数据源询问相对于当前的 View Controller 。

该怎么办? SO中有几篇文章提出了建议。我最喜欢的是@EddieBorja 的回答 here .简而言之,在创建 View Controller 时为其分配索引属性(或 pageNumber)属性。

完成此操作后,您的操作方法可能如下所示:

- (IBAction)chooseButtonid)sender {
    // get the currently visible view controllers
    NSArray *viewControllers = self.myPageViewController.viewControllers

    // get the first visible one
    MyIndexKnowingViewController *myIndexKnowingVC = viewControllers[0];

    // branch on it's index
    if (myIndexKnowingVC.index == 0) {
        _themeTitles.text = @"You chose theme 1";
    } else (myIndexKnowingVC.index == 1) { 
    // etc.

    // if you have more than a few of these, consider a switch statement
    // or even better ...
    _themeTitles.text = [NSString stringWithFormat"You chose theme %d", myIndexKnowingVC.index+1];

以下是我如何实现数据源来设置索引(并在回答数据源协议(protocol)时利用它):

#pragma mark - Page vc datasource

- (UIViewController *)pageViewControllerUIPageViewController *)pageViewController viewControllerBeforeViewControllerUIViewController *)viewController {

    NSUInteger index = ((MyIndexKnowingViewController *)viewController).index;
    return (index)? [self viewControllerAtIndex:index-1] : nil;    
}

- (UIViewController *)pageViewControllerUIPageViewController *)pageViewController viewControllerAfterViewControllerUIViewController *)viewController {

    // note the +1
    NSUInteger index = ((MyIndexKnowingViewController *)viewController).index + 1;

    // define a max index that is one _greater_ then your number of pages
    return (index < MAX_INDEX)? [self viewControllerAtIndex:index] : nil;
}

- (MyIndexKnowingViewController *)viewControllerAtIndexNSUInteger)index {

    // assuming it's defined in a xib, otherwise, just alloc-init
    MyIndexKnowingViewController *childViewController = [[MyIndexKnowingViewController alloc] initWithNibName"MyIndexKnowingViewController" bundle:nil];
    childViewController.index = index;

    return childViewController;
}

关于ios - 如何根据 PageViewController 更改按钮的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983331/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap