presentViewController显示在UIWindow后面

问题描述 投票:0回答:2

我的应用程序中有一个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
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.