2012-12-05 64 views
5

我有一個UIActivityViewController在Facebook/Twitter /電子郵件共享文本和圖像,但它只適用於iOS 6+ ..是否有可能拿起在設備上運行的iOS版本,並做一個IF語句以避免iOS 5崩潰?如果是iOS6,請執行以下代碼,否則請執行其他操作...?if iOS 6 [do this] else iOS 5 [do that]? - UIActivityViewController

-(void)shareMenu 
{ 
    NSString *textToShare = @"Text that will be shared"; 
    UIImage *imageToShare = [UIImage imageNamed:@"share_picture.png"]; 
    NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare, imageToShare, nil]; 
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
    activityVC.excludedActivityTypes = [[NSArray alloc] initWithObjects: UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToWeibo, nil]; 
    [self presentViewController:activityVC animated:YES completion:nil]; 
} 
+0

一般情況下(不是這個特例)我發現通常最好使用'respondsToSelector'來根據它支持的方法來確定我正在處理的iOS類的哪個版本。除此之外,這有助於記錄特定的依賴關係。 –

回答

25
if([UIActivityViewController class]) { 
    NSString *textToShare = @"Text that will be shared"; 
    UIImage *imageToShare = [UIImage imageNamed:@"share_picture.png"]; 
    NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare, imageToShare, nil]; 
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
    activityVC.excludedActivityTypes = [[NSArray alloc] initWithObjects: UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToWeibo, nil]; 
    [self presentViewController:activityVC animated:YES completion:nil]; 
} 

或者更好地利用

if(NSClassFromString (@"UIActivityViewController")) { 

} 

this

+2

這是比明確測試iOS版本號碼更好的解決方案。 – vcsjones

+0

這工作100%謝謝你!但是當我的** NavigationBar **中的** UIBarButtonItem **沒有在iOS6上運行時,我該如何隱藏** UIBarButtonItem **?在iOS5中它是​​可點擊的,但沒有功能,所以我想隱藏它嗎?感謝您的回答! – emotality

+0

http://stackoverflow.com/questions/10021748/how-do-i-show-hide-a-uibarbuttonitem – Max

0

您應該考慮使用[[UIDevice currentDevice] systemVersion],將返回一個字符串,當前的操作系統。您可以輕鬆編寫宏以查看版本是否至少是指定的編號。

+4

這不是一個好主意。檢查所需班級的存在會更好。它比依靠版本號更清潔和直接。 – rmaddy

+0

感謝您的回答! :) – emotality

+0

對系統版本進行測試有一個優勢:它能夠非常清楚地記錄何時可以再次刪除測試(即,當刪除iOS 5支持時)。 – nschum

4

有幾種方法可以做到這一點,但最簡單的方法可能是測試此類的存在性,例如,

if ([UIActivityViewController class]) 
    //iOS 6+ 
else 
    // < iOS 6 
+0

感謝您的回答! :) – emotality