c# - 如何检查 Xamarin iOS 中是否存在某个方法/类/API?

标签 c# ios xamarin.ios xamarin ios8

iOS 6 & 7 Compatibility Tips建议像这样检查特定的 API

public static bool IsiOS7 {
  get { return UIDevice.CurrentDevice.CheckSystemVersion (7, 0); }
}

if(Util.IsiOS7) {
  //Call iOS 7 API
} else {
  //Call iOS 6.1 or earlier API
}

iOS 8 也是如此。现在我读到你应该检查某个方法或类是否存在,而不是版本检查。这里 RespondsToSelector 进来了。应该是这样的

if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
       EdgesForExtendedLayout = UIRectEdge.None;

但是如何检查整个类是否存在,如 UIAlertController?没有像 Objective-C 中那样的 NSClassFromString。我在 Objective-C 中也看到了类似的东西

if ([UIAlertController class]){
    // ...
}

这样的事情会成功吗?

Type type=Type.GetType("UIAlertController");
if(type!=null)
{
    // iOS 8 API
}else{
    // iOS 7 or lower
}

在 C# 中如何做到这一点?或者存在哪些其他方法来检查 UIAlertControllerUISearchController、...等等。

最佳答案

这样做:

using MonoTouch.ObjCRuntime;
bool hasUIAlertController = Class.GetHandle ("UIAlertController") != IntPtr.Zero;
if (hasUIAlertController) {
    // iOS 8
} else {
    // iOS 7 or lower
}

关于c# - 如何检查 Xamarin iOS 中是否存在某个方法/类/API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26295528/

相关文章:

c# - UITableViewDelegate 中的问题 - RowSelected 给出了错误的 NSIndexPath

c# - 我应该在使用 WCF 的应用程序中将比较器放在哪里?

c# - 删除文件夹及其内容

ios - playground.xcworkspace 无法保存,因为文件已存在

ios - UIButton 的空自定义类改变了它的外观

android - Xamarin 蓝牙输入流未读取所有字节(有时)

c# - 如何找到介于其他两种颜色之间的颜色?

c# - 在单元测试中模拟 HttpPostedFile

c++ - 作为可选函数指针的类参数不被识别为函数

xamarin.ios - 使用 MVVMCross 绑定(bind)错误信息