0

问题是这样的。我有一个 PageViewController 作为我的根视图控制器。使用 PageViewController 类的 ViewDidLoad 块中的 SetViewControllers 初始化第一页是有效的,使用页面的手势识别器来回翻转页面也是如此。此根视图控制器可通过 AppDelegate 在应用程序范围内使用。

我想添加从书中任何地方返回第一页的功能,因此在我的 PageViewController 类中创建了一个公共方法,该方法简单地调用了 SetViewControllers 方法。虽然这似乎有效,但我注意到了某些怪癖。在后台循环播放的音乐(同样,在 AppDelegate 中声明的 AVAudio 对象)将重新启动,并且 ViewDidLoad 块不会触发,直到使用手势识别器再次翻页。

我使用 GetNextViewController 尝试了同样的事情,但这只是为 PageViewController 引用引发了一个空引用异常。我假设我没有掌握的控件之间存在某种关系,可能与 PageViewController 的数据源有关。我尝试将其委​​托给一个覆盖默认方法的类,以及使用 Mono 的 this.pageViewController.GetNextViewController = delegate(method signature) 语法无济于事。

有人对我的问题有任何见解吗?

编辑:AppDelegate.cs 的代码可以在这里查看:https : //gist.github.com/1747537 和 PageViewController.cs 的代码: https ://gist.github.com/1747559 。

4

1 回答 1

0

我可以在您的代码中看到几个问题:

  • PageViewController已经是应用程序中的根控制器,无需在AddSubview()任何地方调用。
  • 你继承自然UIViewController后封装一个UIPageViewController。你应该继承自UIPageViewController或根本没有继承(如果它是真的,正如 Dimitri 所说的那样,这UIPageViewController并不意味着子类化)。
  • ReturnToFrontPage()可能是您的 AppDelegate 的方法,而不是您的subclassed UIPageViewController
  • 通过继承和封装的结合,您正在构建视图控制器的层次结构。如果没有正确实施,这将导致触发事件的问题。

简而言之:在你的情况下不要继承任何东西。使用一个普通的 UIPageViewController 并创建ReturnTpFrontPage()你的 AppDelegate 的一个方法,那么它应该都是在公园里散步。

于 2012-02-06T09:31:27.867 回答