0

我正在SLComposeViewController我的应用程序中展示要发布到 Facebook 的内容。用户可以通过以下两种方式之一关闭此视图控制器:将他们的帖子发布到 Facebook,或按“取消”。当用户按下“取消”时,SLComposeViewController被关闭,用户返回到它后面的呈现视图控制器。

但是,我想做的是,如果用户按下“发布”,那么我希望呈现的视图控制器在被解雇后SLComposeViewController也被解雇(即在这种SLComposeViewControllerResultDone情况下)。我的问题是我不知道该怎么做。我意识到我会为此使用完成处理程序,但我被困在这里。这是我拥有的代码SLComposeViewController

    SLComposeViewController *fbSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [fbSheet setInitialText:initialText];
    [fbSheet addImage:myImage];

    SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result) {

    switch(result){
        case SLComposeViewControllerResultCancelled:
        default:
        {
            NSLog(@"Cancelled.....");

        }
            break;
        case SLComposeViewControllerResultDone:
        {
            NSLog(@"Posted....");
        }
            break;
    }

};

[fbSheet setCompletionHandler:completionHandler];

[self presentViewController:fbSheet animated:YES completion:nil];

使用上面的完成处理程序,我得到了NSLog预期的输出。然而,

谁能看到我做错了什么?正如我所指出的,只有当用户“发布”到 Facebook 时,我才需要解除呈现的视图控制器,而不是在他们取消时。

4

2 回答 2

3

SLComposeViewControllerResultDone您可以简单地在完成处理程序的一部分中关闭呈现视图控制器,如下所示:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self dismissViewControllerAnimated:YES completion:nil];
    });

如果您支持 iOS 6,那么您需要先关闭第SLComposeViewController一个。

于 2014-12-28T09:20:06.507 回答
0

您不需要在完成处理程序中关闭 ViewController,它会在您按下取消按钮时处理

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewController * fbSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

    [controller setInitialText:initialText];
    [fbSheet addImage:myImage];
    [self presentViewController:controller animated:YES completion:Nil];        
}
于 2014-12-27T05:57:35.070 回答