2014-10-10 54 views
3

iOS 6 & 7 Compatibility Tips建議檢查特定的API這樣如何檢查Xamarin iOS中是否存在某個方法/類/ 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.現在我讀了你應該檢查是否有一定的方法或類exists代替版本檢查。這裏RespondsToSelector的用武之地。這應該是這樣的

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

但是,如何將一個檢查是否存在像UIAlertController全班? Objective-C中沒有NSClassFromString。我也在Objective-C中看到類似的東西 - C

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

會這樣的事情有訣竅嗎?

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

如何在C#中做到這一點?或者存在其他方式檢查UIAlertControllerUISearchController,...等等。

回答

7

這樣做:

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

我使用Xamarin.iOS 8.10.1.64和我收到以下錯誤消息時我嘗試建立我的解決方案:_Error CS0176:靜態成員ObjCRuntime.Class.GetHandle(串) '不能使用實例引用進行訪問,而是使用類型名稱對其進行限定(CS0176)_ – 2015-06-10 21:14:05

相關問題