在iOS上推特撰写视图后显示Facebook撰写视图

时间:2013-01-05 19:40:37

标签: ios facebook twitter nsnotifications slcomposeviewcontroller

我有一个应用程序,用户可以选择通过Twitter和Facebook与人分享更新,如果他们希望通过两者分享那么事情是棘手的。如果你试图一个接一个地调用他们的SLComposeViewController,那么只有Twitter出现,Facebook根本就不会出现。我试图通过使用NSNotifications来解决这个问题,但它们似乎从未被调用过,并且通过使用完成处理程序,但这些似乎永远不会起作用,只是让整个用户界面变得奇怪。任何人都可以帮助我如何一个接一个地显示SLComposeView?我一直在撞墙四个小时。

1 个答案:

答案 0 :(得分:1)

假设您尝试使用presentViewController的完成处理程序并获得不正确的结果,这是另一种方法。您可以像往常一样呈现第一个作曲家,然后在作曲家的完成块中呈现第二个作曲家。一旦第一个作曲家被解雇,就会调用此完成处理程序。

在我下面设置的示例中,只有当第一个作曲家返回SLComposeViewControllerResultDone时,才会显示第二个作曲家,允许您在用户点击取消时一起关闭所有作曲家。但是,如果您不想要这个功能,可以通过保留呈现第二个作曲家的逻辑,然后一起删除switch语句来轻松删除它。此代码已经过测试,应该可以生成您正在寻找的结果。希望它有所帮助!

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewController *facebookComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [facebookComposer setInitialText:@"facebook"];
    [facebookComposer setCompletionHandler:^(SLComposeViewControllerResult result) {

        switch (result) {
            case SLComposeViewControllerResultCancelled:
                NSLog(@"Post Canceled, bail out");
                break;
            case SLComposeViewControllerResultDone:

                if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
                    SLComposeViewController *twitterComposer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
                    [twitterComposer setInitialText:@"twitter"];
                    [twitterComposer setCompletionHandler:^(SLComposeViewControllerResult result) {
                        NSLog(@"done with both sharing options");
                    }];
                    [self presentViewController:twitterComposer animated:YES completion:nil];
                }

                break;

            default:
                break;
        }
    }];
    [self presentViewController:facebookComposer animated:YES completion:nil];
}