【问题标题】:Twitter Post iOS6 'Cancel' button issueTwitter发布iOS6“取消”按钮问题
【发布时间】:2012-09-19 00:13:27
【问题描述】:

我正在更改我的应用程序以供 iOS6 和 iPhone 使用,我似乎不明白为什么当我使用新的社交框架从 Twitter 发帖时,我必须按两次“取消”才能关闭,任何人其他有这个问题或修复?这是按钮的代码。

- (IBAction)twitterPost:(id)sender
{
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
    mySLComposerSheet = [[SLComposeViewController alloc] init];
    mySLComposerSheet = [SLComposeViewController   composeViewControllerForServiceType:SLServiceTypeTwitter];
    [mySLComposerSheet setInitialText:[NSString stringWithFormat:@"This is my tweet, hello!",mySLComposerSheet.serviceType]];
    [self presentViewController:mySLComposerSheet animated:YES completion:nil];
}
[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
    NSLog(@"dfsdf");
    switch (result) {
        case SLComposeViewControllerResultCancelled:
            break;
        case SLComposeViewControllerResultDone:
            break;
        default:
            break;
    }
}];


}

【问题讨论】:

  • 你有没有试过在展示视图控制器之前设置completionHandler?
  • 成功了,谢谢 Alex。
  • 很好,我已经发布了评论作为答案(见下文)。干杯!

标签: iphone ios xcode ios6 xcode4.5


【解决方案1】:

试试这个朋友

   [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {

        switch (result) {
            case SLComposeViewControllerResultCancelled:
                [self performSelector:@selector(showalert)];
                [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];
                break;
            case SLComposeViewControllerResultDone:
                [self performSelector:@selector(showalert1)];
                [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];
                break;

            default:
                break;


        }
    }];

【讨论】:

  • dissmissViewControllerAnimated 如果您使用 Twitter,则需要,但如果您使用 Facebook,则不需要 - 没有它也可以!
【解决方案2】:

我对 SLComposeViewController 的经验是 twitter 和 weibo 控制器需要手动关闭,而 facebook 控制器似乎表现得更好。

如果我自己不关闭ViewControllerAnimated,点击“发送”按钮将发送推文或微博帖子,但我会看到我自己的视图似乎是一个不可见的视图。因此,我无法再与我的应用程序交互。

我不知道为什么我的应用程序会这样工作......有趣的是,用于取消的 completionHandler 只被调用一次。第二次点击关闭视图控制器。

+ (void) shareText:(NSString*)text image:(UIImage*)image social:(NSString*)service url:(NSString*)url
{
    SLComposeViewController*    controller = [SLComposeViewController composeViewControllerForServiceType:service];

    [controller setInitialText:text];
    [controller addImage:image];
    [controller addURL:[NSURL URLWithString:url]];

    controller.completionHandler = ^(SLComposeViewControllerResult result) {
        if( SLComposeViewControllerResultDone == result )
        {
            NSLog(@"rewards for share: %@!", service );
        }
        if( ![SLServiceTypeFacebook isEqualToString:service] )  // facebook behaves
            [[CBLAppDelegate instance].activeViewController dismissViewControllerAnimated:true completion:nil];
    };
    [[CBLAppDelegate instance].activeViewController presentViewController:controller animated:true completion:nil];
}

【讨论】:

  • 完全一样。您是否向 Apple 发送了一些错误报告?或者你有更好的办法解决吗?
【解决方案3】:

如果您使用 mySLComposerSheet,这非常有用...

[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
[mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];

【讨论】:

  • 然后你需要记住不要为 Facebook SLComposeViewController 这样做,它会自动关闭! rdar:12440972
  • 是的,忘了说。
  • @Steven,你能检查一下 Apple 是否已经解决了这个问题吗?最近他们修复了很多 rdars...
  • 我一直在尝试验证,但由于另一个问题到目前为止没有运气。
  • 您不能使用mySLComposerSheet,因为这是在块代码中发生的。使用self 而不是mySLComposerSheet。顺便说一句,谢谢你的提示:)
【解决方案4】:

发现问题。它仅在将完成处理程序添加到 TWTweetComposeViewController 时发生。如果添加,请确保调用:

[selfdismissModalViewControllerAnimated:YES];

【讨论】:

  • 请使用[self dismissViewControllerAnimated:YES completion:nil]; 而不是[self dismissModalViewControllerAnimated:YES];
【解决方案5】:

在上面发表评论作为答案:

您是否尝试在呈现视图控制器之前设置完成处理程序?

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多