我正在提交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,我需要解雇呈现的视图控制器,而不是在他们取消时。
答案 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];
}