2

我有一个应用程序,用户可以选择通过 Twitter 和 Facebook 与人们分享更新,如果他们希望通过两者分享,那么事情就很棘手了。如果您尝试一个接一个地调用他们的 SLComposeViewController,则只会出现 Twitter,而 Facebook 则根本不会出现。我试图通过使用 NSNotifications 来解决这个问题,但它们似乎从未被调用,并通过使用完成处理程序,但这些似乎永远不会工作,只会让整个 UI 变得奇怪。谁能帮我一个接一个地显示 SLComposeView 吗?我已经用头撞墙四个小时了。

4

1 回答 1

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];
}
于 2013-01-05T22:19:47.827 回答