覆盖单独的SecondaryViewControllerForSplitViewController:用于单点触控中的特定UIViewController

Posted

技术标签:

【中文标题】覆盖单独的SecondaryViewControllerForSplitViewController:用于单点触控中的特定UIViewController【英文标题】:Override separateSecondaryViewControllerForSplitViewController: for specific UIViewController in monotouch 【发布时间】:2015-02-11 20:28:40 【问题描述】:

我正在尝试根据 Apple doc Discussion 覆盖单独的SecondaryViewControllerForSplitViewController 上的默认 UINavigationController 行为

默认情况下,大多数视图控制器什么都不做,但 UINavigationController 类通过从其导航堆栈顶部弹出并返回视图控制器来响应。

我的目标是:

    从 UISplitViewControllerDelegate.SeparateSecondaryViewController 返回 null 也覆盖用作主视图控制器的默认 UINavigationController => 导致没有辅助视图控制器(因为当拆分视图控制器未折叠时,没有显示模式只能获取主视图控制器...)

但是我在 VS 的 IntelliSense 中甚至在通过反射浏览程序集时都找不到任何覆盖点,除了从选择器调用方法的扩展方法。

我可以在这一点上覆盖默认的 UINavigationController 行为吗? 如果是,是 Xamarin API 中的错误吗? 或者 Xamarin 是否期望我们必须手动导出选择器?

也许是这样的: [Export("separateSecondaryViewControllerForSplitViewController:")] public UIViewController SeparateSecondaryViewController(UISplitViewController splitViewController)

注意:我将 Xamarin 用于 VS 3.8.151.0 | Xamarin.ios 8.4.0.0 ... 自统一 API 发布以来的已知问题列表仍然有点担心 :)

【问题讨论】:

【参考方案1】:

在 Xamarin.iOS 的 UIViewController 中似乎没有正确绑定此方法。

UIKit.UISplitViewController_UIViewController上的扩展方法,定义为:

[Export ("separateSecondaryViewControllerForSplitViewController:"), Availability (Introduced = Platform.iOS_8_0), CompilerGenerated]
public static UIViewController SeparateSecondaryViewControllerForSplitViewController (this UIViewController This, UISplitViewController splitViewController);

您应该能够像这样将该方法放入您的视图控制器子类中:

[Export ("separateSecondaryViewControllerForSplitViewController:")]
public UIViewController SeparateSecondaryViewControllerForSplitViewController (UISplitViewController splitViewController)

  return null; // return whatever you need to return

手动导出它应该可以解决问题。让我知道它是否有效。

【讨论】:

separateSecondaryViewControllerForSplitViewController:UIViewController 定义,因此由UINavigationController 继承(和覆盖) 嗯...看这个;也许有帮助;对我来说,看起来你是对的,并且这些方法没有出现在 Xamarin.iOS 中:iosapi.xamarin.com/… 我尝试自己定义导出并且效果很好(我的意思是我的实现被调用)......但是我无法以这种方式实现我的目标(当我的 UISplitViewController 没有辅助视图控制器因特征改变而分开)。我已经放弃了这一点,因为 Apple 实现似乎并没有真正期望它,我不想仅仅为此子类 UISplitViewController,我只想要一个委托。将您的回复标记为已回答,因为它解决了我的第一个问题,感谢您的帮助:)

以上是关于覆盖单独的SecondaryViewControllerForSplitViewController:用于单点触控中的特定UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中检测不活动(无用户交互)以显示单独的屏幕,如覆盖

如何通过 Angular、Karma 和 Webpack 的单独文件拆分代码覆盖率?

覆盖单独的SecondaryViewControllerForSplitViewController:用于单点触控中的特定UIViewController

在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率

单元格从覆盖 UIVIew 中获取单独的颜色

VueJS 组件:具有 vue-class-component 的单独文件的代码覆盖率