我的应用中有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]
问题是在教程下显示了共享框(当教程被隐藏时,我们可以看到共享框),我希望在教程中有它。
我想这是因为教程是作为窗口的子视图添加的,但我不知道该怎么做。
你有一些解决这个问题的技巧吗?
答案 0 :(得分:1)
通常,您将某种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。