c# - MonoTouch NSClassFromString

标签 c# .net objective-c ios xamarin.ios

我正在尝试在 MonoTouch 中使用诸如以下 Objective-C 的代码:

if (NSClassFromString(@"ADBannerView"))

C# 中的等价物是什么?

基本上我想使用 iAd,但我需要检查 ADBannerViewADInterstitialAd 是否存在,因为它们并非在所有版本的操作系统上都可用. (与 iOS 版本检查相比,我更愿意进行功能检查)

我认为这在其他情况下也会有所帮助。

最佳答案

最近的 MonoTouch 将始终提供 ADBannerView,因此您无法使用 C# 等效的 Type.GetType 来查询可用性。

通常情况下,版本检查是检查功能的最佳方式。例如

bool available = UIDevice.CurrentDevice.CheckSystemVersion (4, 0);

将为任何 4.0+ 版本的 iOS 返回 true(4.0 是 ADBannerView 被添加到 iOS 时)。

一种可能的替代方法(可能并非在所有情况下都有效)是创建一个实例并检查它的句柄。由于 ObjC 是基于消息的,因此发送 init 将返回 null(这是 .NET 构造函数无法做到的)。例如。

bool available = (new ADBannerView ().Handle != IntPtr.Zero);

请注意,您最好将上面的内容用 using 来处理 View 或将其集成到 ADBannerView 的正常创建中。

更新:当然是对 NSClassFromString 的 p/调用将与 ObjectiveC 代码完全一样:-)

关于c# - MonoTouch NSClassFromString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10950117/

相关文章:

c# - 构建后消失的用户控件

c# - 如何覆盖 ToString() 方法以输出列表?

ios - 在 iOS 中动态转换?

ios - NSOperationQueue ....发送了无法识别的选择器

ios - UIApplication sharedapplication openURL 不工作

c# - 是什么允许 .NET 任务在等待 I/O 完成后继续执行?

c# - 如何在 MVC 5 上设置 Session 变量过期时间?

c# - 根据方法参数构建 IQueryable

c# - 使用 XML 获取所有同名元素的内容?

c# - 用于异常处理和报告的 SmartAssembly 的替代方案?