1

我正在使用 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 被调用。它应该转到三月的页面,但是当我点击它时没有任何反应

我是否忘记或错过了什么?

4

1 回答 1

0

我在弄清楚如何进行页面跳转时也遇到了问题。我所做的一切对我来说都是死路一条,即使是聊天中建议的所有事情。使用您的方法,我能够看到对该函数的调用已经发生,并且它也从模态视图控制器中提取了数据。但它给了我一个空对象错误。当要设置视图时。所以我输入了一些更多的诊断信息来看看发生了什么,因为我已经把应该发生的事情拼凑起来了。我输入的所有数据都很好。问题是情节提要对象由于某种原因为空,这导致它无法从情节提要中加载项目,即使它知道要加载哪个项目,据它所知情节提要上没有任何内容,因此模态视图传回一个空对象。然后它又撞回了主要的。所以这导致我试图弄清楚为什么故事板对象为空。怎么早被dealloc'ed了?这是我的第一个问题,我想我会尝试制作它的副本,这样我们就可以从那里使用副本,但仍然没有骰子。然后一个想法在我们使用 alloc 和 init 的顶视图控制器中击中了我(感谢上帝),这就是您创建新对象的方式。难道不是创建一个链接回到实际的根控制器,该命令创建了第二个根控制器,然后创建了一个第二个模态控制器,该控制器偏向于程序对这些类类型具有的相同类模板,并且正在传递函数调用到那个。如果是这样,那么新的根视图控制器将没有第一个的情节提要。它也没有任何影响它的能力,因为它们实际上是独立的对象。所以继续这个假设,我意识到我因为无法使用你的方法而重新开始。但是另一位上帝灵光一现,如果我将指向实际根视图控制器的指针沿链向上发送到顶视图控制器并使用指向回调的指针会怎样?所以我试过了,你瞧,我终于让它工作了。

所以我最终做的是在顶部视图控制器中设置一个新属性 .h 类型的 id 像这样

@property (weak,nonatomic) id homebase;

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

@synthesize homebase;

然后回到根视图控制器,我修改了 viewdidload和旋转观察器的处理程序,以便在它创建DataViewController之后添加到这一行

startingViewController.homebase=self;

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

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

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

我尝试修改didFinishAnimating以查看是否可以在完成加载后将引用插入其中,因为在单击按钮之前不需要它,直到此函数运行后才会发生这种情况,但是我无法从那里访问该属性可以看到。

经过更多工作后,我发现这里的最后一步是修改viewControllerAtIndex以获取指针并存储它,并将其设置在 DataView 控制器上,然后再将其放回。然后当它被一个空指针调用时,它会使用它存储的那个。这样,在这两种类型的调用中,它都有要切换的指针,然后一切正常。即使您现在翻页并且不先旋转它。

于 2012-08-11T20:04:55.757 回答