1

アプリで表示している にカスタム アクティビティ ( UIActivity)を追加したいと考えています。SFSafariViewControllerこれどうやってするの?

4

1 に答える 1

0

1. のサブクラスを作成しますUIActivity

クラスの必要なすべてのメソッドを実装し、アクティビティを初期化するときに、その時点でページの URL を渡し、コンテキスト内で呼び出されないためUIViewController、を初期化します ( rdar://24138390 )。アクティビティに UI が表示されない場合は、代わりに初期化中に URL を保存して、ユーザーがアクションをタップしたときに処理できるようにします。prepareWithActivityItems:SFSafariViewController

完全な例:

@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

UIActivity2.に追加SFSafariViewController

次のメソッドを に実装しますSFSafariViewControllerDelegate。これにより、アクティビティが初期化され、ユーザーが表示しているページの URL が渡されます。

- (NSArray<UIActivity *> *)safariViewController:(SFSafariViewController *)controller
                            activityItemsForURL:(NSURL *)URL
                                          title:(NSString *)title
{
    YourActivity* activity = [[YourActivity alloc] initWithURL:URL];
    return @[activity];
}
于 2016-07-30T23:33:12.910 に答える