3

を使用しているアプリがありますUIActivityViewController

これは私が使用しているコードです。

 NSString *postText = @"My Text";
    NSArray *activityItems = @[postText];

    UIActivityViewController *activityController =
    [[UIActivityViewController alloc]
     initWithActivityItems:activityItems applicationActivities:nil];
    activityController.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, nil];
    [self presentViewController:activityController
                       animated:YES completion:nil];

これはうまくいきます。から Twitter やメールを開くUIActivityViewControllerと、共有したいテキストが表示され、それで問題ありません。

しかし、投稿が成功した場合、または電子メールが正常に送信された場合にのみ、DBで何らかのアクションを実行したいと考えています。

どうやってやるの?

4

3 に答える 3

14
    [activityController setCompletionHandler:^(NSString *act, BOOL done)
             {

                 NSLog(@"act type %@",act);
                 NSString *ServiceMsg = nil;
                 if ( [act isEqualToString:UIActivityTypeMail] )           ServiceMsg = @"Mail sent";
                 if ( [act isEqualToString:UIActivityTypePostToTwitter] )  ServiceMsg = @"Post on twitter, ok!";
                 if ( [act isEqualToString:UIActivityTypePostToFacebook] ) ServiceMsg = @"Post on facebook, ok!";

                 if ( done )
                 {
                     UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:ServiceMsg message:@"" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
                     [Alert show];
                     [Alert release];
                 }
                 else
                 {
                      // didn't succeed. 
                 }
             }];

完了ハンドラの「done」パラメータを使用して、完了したかどうかを確認します

于 2013-04-25T08:55:37.220 に答える
4

completionHandleriOS 8.0 以降では非推奨です。代わりに使用completionWithItemsHandlerして、ここに Swift の例を示します。

let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil)
activityViewController.completionWithItemsHandler = { activity, success, items, error in
    if success {
        // Success handling here    
    }
}
于 2015-09-14T12:36:25.460 に答える
2
 activityController.completionWithItemsHandler = ^(NSString *act, BOOL done, NSArray *returnedItems, NSError *activityError)

{
    NSString *ServiceMsg = nil;
    if ( [act isEqualToString:UIActivityTypeMail] ) ServiceMsg = @"Mail sended!";
    if ( [act isEqualToString:UIActivityTypePostToTwitter] )ServiceMsg = @"Post on twitter, ok!";
    if ( [act isEqualToString:UIActivityTypePostToFacebook] )ServiceMsg = @"Post on facebook, ok!";
    if ( [act isEqualToString:UIActivityTypeMessage] )ServiceMsg = @"SMS sended!";
    if ( done )
    {
        UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:ServiceMsg message:@"" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
        [Alert show];
    }
};
于 2015-09-04T12:45:08.567 に答える