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