如何向 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 添加自定义活动?的主要内容,如果未能解决你的问题,请参考以下文章

如何向用户显示警报?

如何向 jtextfield 添加填充

如何向免费用户显示不同的页面,向付费用户显示不同的页面

如何向 CountDownTimer 添加闹钟?

如何加快向 ListView 添加项目?

如何使用 xmpppy 向聊天室发送消息?