【问题标题】:Accessing PageViewController's methods from child view controller从子视图控制器访问 PageViewController 的方法
【发布时间】:2012-02-27 08:21:12
【问题描述】:

问题是这样的。我有一个 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

【问题讨论】:

  • 我假设你是 UIPageViewController 的子类,对吧?这个控制器不应该被子类化,但一些代码会有所帮助。

标签: ios ipad mono xamarin.ios uipageviewcontroller


【解决方案1】:

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

  • 您的PageViewController 已经是您应用中的根控制器,无需在任何地方调用AddSubview()
  • 你继承自UIViewController,然后封装一个UIPageViewController。你要么继承自UIPageViewController,要么根本没有继承(如果这是真的,因为Dimitri说UIPageViewController不适合子类化) .
  • ReturnToFrontPage() 可以是您的 AppDelegate 的方法,而不是您的子类 UIPageViewController
  • 通过结合继承和封装,您可以构建视图控制器的层次结构。如果没有正确实施,这将导致触发事件的问题。

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

【讨论】:

  • 我也遇到了同样的问题,能否请您发布它的代码。从书中的任何地方返回到第一页。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多