0

我的应用程序中有一个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]

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

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

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

4

2 回答 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 中,您可以使用 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 架构将防止遇到这些问题。

于 2014-09-25T15:56:45.307 回答
-1

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

于 2014-09-25T15:58:14.720 回答