UIActivityViewController issue iOS 7 and iOS 8?

后端 未结 3 1348
悲&欢浪女
悲&欢浪女 2021-02-15 01:22

I’m building an article reading app for iPad. I have integrated a social sharing functionality which means user can share articles on Facebook, and google mail. I’m using

相关标签:
3条回答
  • 2021-02-15 01:59

    Following line is the issue

    AVC.popoverPresentationController.sourceView = _webView;
    

    You will have to put iOS8 condition in order popoverPresentationController is introduced for iOS 8 and later so you can not use it with iOS 7

    For checking for iOS8 you can define a macro like found from here

    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    

    And use it in following way.

         NSURL *linkURL = [NSURL URLWithString:_DetailModal1[4]];//article url
         NSMutableAttributedString *stringText = [[NSMutableAttributedString alloc]  initWithString:_DetailModal1[0]];//_DetailModal1[0] contain article title////
        [stringText addAttribute:NSLinkAttributeName value:linkURL range:NSMakeRange(0, stringText.length)];
        NSArray * itemsArray = @[[NSString stringWithFormat:@"%@",_DetailModal1[0]], [NSURL URLWithString:_DetailModal1[4]]];
        NSArray * applicationActivities = nil;
        UIActivityViewController * AVC = [[UIActivityViewController alloc] initWithActivityItems:itemsArray applicationActivities:applicationActivities];
    
       if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
    
            AVC.popoverPresentationController.sourceView = _webView;
       }
       [self presentViewController:AVC animated:YES completion:nil];
    

    Refer this for more info about what has changed for UIActivityViewController in iOS8

    0 讨论(0)
  • 2021-02-15 02:04

    In Swift, You can use '?' instead checking OS version. AVC.popoverPresentationController?.sourceView = _webView

    0 讨论(0)
  • 2021-02-15 02:09

    A lot might argue that checking for existence of the class explicitly is better than checking a hard coded version number. UIPopoverPresentationController may be deprecated at some future point, or there might be a (future ?) device which does not support the class, like the iPhone never used to support UIPopoverController or UISplitViewController..

    if (  NSClassFromString(@"UIPopoverPresentationController")   ) {
    
    AVC.popoverPresentationController.sourceView = _webView;
    
    
    }
    
    0 讨论(0)
提交回复
热议问题