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 もモーダルで表示したいので、これは悪い考えかもしれません。少なくとも昔は、モーダルに提示されたものからモーダルに提示されたviewControllerを提示する際にiOSに問題がありました:)

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

tutorialViewController では、xib、ストーリーボード、(void)loadView のいずれかを使用して、tutorialView を作成し、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

appDelegate.window の代わりに [[UIApplication sharedApplication] keyWindow] のチュートリアルを追加してみてください。

于 2014-09-25T15:58:14.720 に答える