【问题标题】:presentViewController is displayed behind UIWindowpresentViewController 显示在 UIWindow 后面
【发布时间】:2014-11-20 10:56:35
【问题描述】:

我的应用中有一个UITabBarcontroller,当显示第一次点击时,我使用MyBlurIntroductionView 启动一个教程

为简单起见,设置教程后,我只需将其添加到应用程序的全屏,使用:

[appDelegate.window addSubview:introductionView];

在本教程中,我想提供使用以下代码通过 Twitter 分享的功能:

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
    SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [tweetSheet setInitialText:@"Tweeting from my own app! :)"];
    [parentController setModalPresentationStyle:UIModalPresentationFullScreen];


    [parentController presentViewController:tweetSheet animated:NO completion:nil];
}else{
    NSLog(@"Not available");
}

因此,此代码是从教程中调用的,它是一个UIView,并且由于此代码而获得了parentController

UITabBarController *tabbarController =(UITabBarController*)self.window.rootViewController;    
UIViewController *parentController = tabbarController.viewControllers[0]

问题是分享框显示在教程下方(隐藏教程后,我们可以看到分享框),我想把它放在教程上方。

我猜这是因为教程被添加为窗口的子视图,但我不知道如何做不同的事情。

你有一些解决这个问题的技巧吗?

【问题讨论】:

    标签: ios objective-c twitter uiwindow presentviewcontroller


    【解决方案1】:

    据我所知,我们遇到了一些架构方面的问题......说说 MVC。

    通常你将某种 RootViewController 附加到你的 UIWindow。其他一切都从那里开始。使用你的 UIWindow 会导致到处都是问题。

    如果这是您第一次打开应用程序,您可以在您的 RootViewController 中检查 viewDidLoad。如果是这样,请创建一个带有您要显示的视图的 TutorialViewController 并呈现 tutorialViewController。如果您的 RootViewController 在 UINavigationController 中,则通过推送您的 tutorialViewController。

    [self.navigationController pushViewController:TutorialViewController animated: NO];
    

    或以模态方式呈现。但是由于您也想以模态方式呈现 TwitterViewController,这可能不是一个好主意。至少在过去,iOS 在呈现一个以模态呈现的 viewController 时遇到问题:)

    [self presentViewController:TutorialViewController animated:YES completion:NULL];
    

    在 tutorialViewController 中,您可以使用 xib、情节提要、- (void)loadView 创建您的 tutorialView - 并设置 Target/Action 以针对您的 TutorialViewController 触发。 ViewControllers 通常是你处理 UI 的地方(也是 UserInteraction)。不要在你的视图中这样做——尤其是在检查 Twitter 依赖项时。

    这样,您的项目中的所有内容都是分层的,并且没有隐含的东西,其他开发人员会喜欢打你的。请不要再做这样的 evar ;)

    UITabBarController *tabbarController =(UITabBarController*)self.window.rootViewController;    
    UIViewController *parentController = tabbarController.viewControllers[0]
    

    您现在的实际问题:您的 parentViewController 在您的 TutorialView 下方。如果你的 parentViewController 以模态方式呈现某些东西,它会将模态呈现的视图添加到它的 viewStack 中,它仍然在你的 tutorialView 下方。但正如我所说,干净的 MVC 架构将防止遇到这些问题。

    【讨论】:

      【解决方案2】:

      尝试在此处添加教程:[[UIApplication sharedApplication] keyWindow] 而不是 appDelegate.window。

      【讨论】:

      • 不会改变任何东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多