为什么我无法跳转到UIPageView中的特定页面?

时间:2012-07-16 01:54:43

标签: objective-c ios uibutton uipageviewcontroller

我正在使用X-code 4.3.2。 我创建了一个新的基于页面的应用程序项目。 然后我在dataViewController类中创建一个UIButton,以便在单击该按钮时跳转到特定页面。

以下是我添加的简单代码。

 //Create a button in dataViewController.h
 @property (strong, nonatomic) IBOutlet UIButton *btn;

//Add button action
-(IBAction)jump:(id)sender{
    RootViewController *root = [[RootViewController alloc]init];
    [root jump2page];
}

在RootViewController类

-(void)jump2page
{
    DataViewController *targetViewController = [self.modelController viewControllerAtIndex:2 storyboard:self.storyboard];

    NSArray *viewControllers = [NSArray arrayWithObjects:targetViewController,nil];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}

当我点击一个按钮时,方法是jump2page。它应该转到第3个月的页面, 但是当我点击它时什么都没发生

我会忘记或遗漏某些事情吗?

1 个答案:

答案 0 :(得分:0)

我在弄清楚如何进行页面跳转时也遇到了问题。而我所做的一切都已经结束了,即使是聊天中建议的所有事情。使用你的方法,我能够看到虽然已经发生了对函数的调用,但它也从模态视图控制器中提取了数据。但它给了我一个空对象错误。什么时候去设置视图。所以我输入了一些更多的诊断信息,看看发生了什么,因为我已经将这应该发生的事情拼凑在一起。我投入的所有数据都很流畅。问题是故事板对象由于某种原因是null并且导致它在从故事板加载项目时失败,即使它知道要加载哪一个,只要它可以告诉故事板上没有任何东西,所以模态视图传回一个空物体。然后它在主要的一个中崩溃了。所以这导致我试图找出故事板对象为何为空的原因。怎么这么早被dealloc'ed?是我的第一个问题,我以为我会尝试复制它,这样我们就可以使用那里的副本仍然没有骰子。然后一个想法在顶视图控制器中击中了我(感谢上帝)我们正在使用alloc和init,这就是你如何创建一个新对象。可能是,而不是创建一个回到实际根控制器的链接,该命令创建了第二个根控制器,然后创建了第二个模态控制器,偏离了程序对这些类类型的相同类模板并且正在传递函数调用那个。如果是这样,新的根视图控制器将不具有第一个的故事板。也不会有任何影响它的能力,因为它们实际上是独立的对象。所以继续这个假设我意识到我重新开始,因为我无法使用你的方法。但是如果我发送一个指向实际根视图控制器的链接到顶视图控制器并使用指针指向回调,那么另一个上帝给了灵感闪光?所以我试着这样做,最后我明白了。

所以我最终做的是在顶级视图控制器.h中设置一个类似id的新属性

@property (weak,nonatomic) id homebase;

然后将其放入顶视图控制器.m文件

@synthesize homebase;

然后回到根视图控制器中,我修改了 viewdidload 和旋转观察器的处理程序,在它创建 DataViewController 后立即添加到此行中 p>

startingViewController.homebase=self;

将我在顶视图控制器中定义的属性设置为实际根视图控制器的地址。我做的最后一件事是修改按钮点击事件

- (IBAction)pushedbutton:(UIButton *)sender 
{
   if (homebase==nil)
   {
      NSLog(@"no homebase");
      return;
   }
   [homebase jumpto:1];
}

现在我发现如果我在第一页上使用它(并将值设置为1以外的页面),那么它将跳转到该页面。如果我在任何其他页面上使用它,它将吐出“没有主页”,除非我旋转设备然后它将工作。

我尝试修改 didFinishAnimating 以查看我是否可以在完成加载后在那里拍打引用,因为在单击按钮之前不需要它,这在此函数运行之后才会发生,但是从那里我无法访问那个属性。

经过一些工作之后,我发现这里的最后一步是修改 viewControllerAtIndex 以获取指针并存储它,并在将其交回之前将其设置在DataView控制器上建造。然后当用空指针调用它时,它使用它存储的那个。对于这两种类型的调用,它都有指针切换,然后一切都解决了。即使你翻页也不要先旋转它。