presentViewController显示在UIWindow后面

时间:2014-09-25 15:32:10

标签: ios objective-c twitter uiwindow presentviewcontroller

我的应用中有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]

问题是在教程下显示了共享框(当教程被隐藏时,我们可以看到共享框),我希望在教程中有它。

我想这是因为教程是作为窗口的子视图添加的,但我不知道该怎么做。

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

2 个答案:

答案 0 :(得分: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中,您可以创建tutorialView - 使用xib,storyboard, - (void)loadView - 并设置Target / Action来触发TutorialViewController。 ViewControllers通常是您处理UI内容(也是UserInteraction)的地方。不要在您的视图中执行此操作 - 尤其是在检查Twitter依赖项时。

通过这种方式,您可以在项目中拥有所有层次结构且没有隐含的内容,而其他开发人员则希望能够为您提供帮助。请不要再做这样的事情了;)

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

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

答案 1 :(得分:-1)

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