【问题标题】:How to add a custom activity to SFSafariViewController?如何向 SFSafariViewController 添加自定义活动?
【发布时间】:2016-07-30 23:33:12
【问题描述】:

我想将自定义活动 (UIActivity) 添加到我在我的应用程序中呈现的 SFSafariViewController。我该怎么做?

【问题讨论】:

    标签: ios objective-c sfsafariviewcontroller


    【解决方案1】:

    1。创建UIActivity 的子类。

    实现类的所有required methods,并在初始化活动时,在该点传入页面的URL并初始化您的UIViewController,因为prepareWithActivityItems:不会在SFSafariViewController上下文中调用( rdar://24138390)。如果您的 Activity 未显示 UI,请在初始化期间保存 URL,以便在用户点击操作时对其进行处理。

    完整示例:

    @interface YourActivity : UIActivity {
        UIViewController *activityViewController;
    }
    - (id)initWithURL:(NSURL *)url;
    @end
    
    
    @implementation YourActivity
    
    - (id)initWithURL:(NSURL *)url
    {
        self = [super init];
        if (self)
        {
            [self prepareWithURL:url];
        }
        return self;
    }
    
    - (NSString *)activityType
    {
        return @"YourTypeName";
    }
    
    - (NSString *)activityTitle
    {
        return @"Perform Action";
    }
    
    - (UIImage *)activityImage
    {
        return [UIImage imageNamed:@"YourActionIcon"];
    }
    
    - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
    {
        return YES;
    }
    
    - (void)prepareWithActivityItems:(NSArray *)activityItems
    {
        NSURL* url = nil;
        for (NSObject* obj in activityItems)
        {
            if ([obj isKindOfClass:[NSURL class]])
            {
                url = (NSURL*)obj;
            }
        }
        
        [self prepareWithURL:url];
    }
    
    - (void) prepareWithURL:(NSURL*)url
    {
        // initialize your UI using the given URL
        activityViewController = ... // initialize your UI here
    }
    
    - (UIViewController *)activityViewController
    {
        return activityViewController;
    }
    
    + (UIActivityCategory)activityCategory
    {
        return UIActivityCategoryShare;
    }
    
    
    @end
    

    2。将UIActivity 添加到SFSafariViewController

    在您的SFSafariViewControllerDelegate 中实现以下方法,该方法初始化活动并传入用户正在查看的页面的 URL。

    - (NSArray<UIActivity *> *)safariViewController:(SFSafariViewController *)controller
                                activityItemsForURL:(NSURL *)URL
                                              title:(NSString *)title
    {
        YourActivity* activity = [[YourActivity alloc] initWithURL:URL];
        return @[activity];
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2019-09-12
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多