1

のさまざまなサービスにさまざまなコンテンツを提供したいと考えていますUIActivityIndicatorView。たとえば、電子メールの HTML 文字列、Facebook/Twitter の標準文字列、コピーの画像などです。これらはすべて、単一のポップオーバー ウィンドウ内で発生します。

これは不可能だと思います。関連するすべてのクラスをいじっていると、提供したコンテンツ タイプが変わると、アクティビティ ビューに表示されるサービスが変わることに気付きました。つまり、文字列を指定すると、セット A のサービスが表示されました。画像を提供すると、サービスのセット B が表示されました。

次に、異なるコンテンツを提供する可能性があると考えて、文字列と画像の両方を追加しようとしましたが、これは文字列と画像の両方をサービスに追加するだけです (たとえば、メールは文字列で作成され、次に下の画像)。

文字列値(htmlリンク)を提供する方法は次のとおりです。

-(void)shareButtonTouchUpInside:(SMActionToolbarViewController*)sender{
    // Reposition anchor view for UIPopoverController to point at
    [self repositionAnchorViewToButtonFrame:self.actionToolbarViewController.shareButtonFrame];

    // Asynch download of image
    [SMUtility downloadAsset:self.selectedAsset completion:^(UIImage *image) {
        // Create image source
        SMActivitySource *activityImageSource = [[SMActivitySource alloc]initWithImage:image];
        // Create string source
        NSString *assetsString = [SMUtility assetsString:[NSArray arrayWithObject:self.selectedAsset]];
        SMActivitySource *activityStringSource = [[SMActivitySource alloc]initWithString:assetsString];

        // Present UIActiviyViewController within an UIPopoverController
        NSArray *items = [@[activityImageSource, activityStringSource]mutableCopy];
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
        [activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed){
            // TODO: Populate mixpanel data
            [SMMixPanel eventSharePhotoMethod:@"Unknown"];
        }];
        self.buttonPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
        [self.buttonPopoverController presentPopoverFromRect:self.anchorView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }];
}
4

2 に答える 2

3

UIActivityItemProviderをサブクラス化するか、 UIActivityItemSourceに準拠するオブジェクトを作成する必要があります。それらの配列 (共有したいものごとに 1 つ) を渡し、activityViewController:itemForActivityType:呼び出しで選択されたアクティビティに応じて、それらのいくつかが nil を返すようにします。

于 2013-07-31T20:13:50.277 に答える
0

この質問は何度も尋ねられています。それを修正する唯一の方法は、独自の UIActivity を作成することです。その方法については、Apple のドキュメントを参照してください。リンクは次のとおりです。http://developer.apple.com/library/ios/#documentation/uikit/reference/UIActivity_Class/Reference/Reference.html

于 2013-05-15T17:03:04.427 に答える