如何向 SFSafariViewController 添加自定义活动?
Posted
技术标签:
【中文标题】如何向 SFSafariViewController 添加自定义活动?【英文标题】:How to add a custom activity to SFSafariViewController? 【发布时间】:2016-07-30 23:33:12 【问题描述】:我想将自定义活动 (UIActivity
) 添加到我在我的应用程序中呈现的 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];
【讨论】:
以上是关于如何向 SFSafariViewController 添加自定义活动?的主要内容,如果未能解决你的问题,请参考以下文章