SLComposeViewController在应用程序中发送回来的视图变得无法响应

时间:2013-04-16 11:24:02

标签: iphone ios slcomposeviewcontroller

我的应用中有一个按钮,可以显示SLComposeViewController用于Twitter。当视图显示时,它会正确动画并消失。我发现它消失后会被发送到当前视图的后面,我无法将其恢复。我试过在代码中手动将所有视图发送到后面而没有运气。我觉得我的应用程序出现了根本性的错误,因为这种行为可以在任何级别上看到应用程序中的导航控制器。下面是应用程序中导航栏的SLComposeViewController的屏幕截图,我使ViewController的视图的Alpha值为0.0f来说明我的观点:

enter image description here

我真的不知道这里发生了什么,我们将非常感谢任何帮助。我用来呈现SLComposeViewController的代码是非常标准的,我已经在另一个应用程序中进行了测试并且工作正常:

NSString *message = [NSString stringWithFormat:@"#%@", [twitterInfo objectForKey:@"hashtag"]];

if ([appDelegate isSocialAvailable]) {
    // code to tweet with SLComposeViewController
    SLComposeViewController *twitter = [[SLComposeViewController alloc] init];
    twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [twitter setInitialText:[NSString stringWithFormat: @"%@", message]];
    [self presentViewController:twitter animated:YES completion:nil];        
} 

2 个答案:

答案 0 :(得分:1)

感谢您发布此消息,我发生了同样的事情,因为我在窗口中添加了一个CAShapeLayer以获得渐变效果。你的帖子帮助我弄清楚这就是问题所在。

看起来这种情况正在发生,因为他们正在将视图的图层添加到窗口的子图层中 - 在索引0处我可能会添加!这与您期望的相反,即他们将视图作为子视图添加到呈现视图控制器的视图中。

他们必须认为人们不会在他们的窗口中添加图层,并且他们希望确保他们不与您的视图堆栈竞争。为什么他们会把它放到索引0中只是因为有人习惯做-[CALayer insertLayer:layer atIndex:0]我想。

我不确定,但我猜这可能是任何模态视图控制器的情况。

修复非常简单:

[viewController presentViewController:facebookViewController
                             animated:YES
                           completion:^{
    facebookViewController.view.layer.zPosition = 1000;
}];

答案 1 :(得分:0)

经过一周的撕扯我的头发找到解决方案后,我在应用程序中找到了令人讨厌的代码,这是一个圆形整个应用程序角落的小技巧,好像让角落看起来像圆角一样那里的图像:

UIImage *bottomOverlayImage = [UIImage imageNamed:@"bottom_overlay.png"];
CALayer *bottomOverlay = [CALayer layer];
bottomOverlay.frame = CGRectMake(0, self.window.frame.size.height - 9, bottomOverlayImage.size.width, bottomOverlayImage.size.height);
bottomOverlay.contents = (id)bottomOverlayImage.CGImage;
bottomOverlay.zPosition = 1;
[self.window.layer addSublayer:bottomOverlay];

如果有人能告诉我为什么这段代码会弄乱Twitter视图,这对将来的参考非常有帮助。此代码放在app委托中,并在首次加载时运行。