在用户发布到iOS中的FB后尝试解除显示SLComposeViewController的View Controller

时间:2014-12-27 04:40:01

标签: ios facebook slcomposeviewcontroller

我正在提交SLComposeViewController在我的应用中发布到Facebook。用户可以通过以下两种方式之一关闭此视图控制器:通过将其帖子发布到Facebook,或按“取消”。当用户按下“取消”时,SLComposeViewController将被解除,并且用户将返回到其后面的呈现视图控制器。

但是,我想要做的是如果用户按下“post”,那么我希望在SLComposeViewController被解雇后(即SLComposeViewControllerResultDone案例中,呈现的View Controller也会被解雇) )。我的问题是我不知道该怎么做。我意识到我会使用完成处理程序,但我被困在这里。这是我提供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,我需要解雇呈现的视图控制器,而不是在他们取消时。

2 个答案:

答案 0 :(得分:3)

您可以简单地将完成视图控制器放在completionHandler的SLComposeViewControllerResultDone部分中,如下所示:

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

如果您支持iOS 6,则需要首先关闭SLComposeViewController

答案 1 :(得分:0)

你不需要在完成处理程序中解除ViewController,当你按下取消按钮时它将被处理

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

    [controller setInitialText:initialText];
    [fbSheet addImage:myImage];
    [self presentViewController:controller animated:YES completion:Nil];        
}