0

最近、アプリのチュートリアルに取り組んでいます。このチュートリアルでチュートリアルを作成しました:

http://www.appcoda.com/uipageviewcontroller-tutorial-intro/

rootViewControllerユーザーを、この場合は に戻す「ボタン」を作成しましたTabBarController。問題は次のとおりです。このチュートリアルでは、チュートリアル用に追加のストーリーボードを作成しました。rootViewController(TabBarController)では、ボタンで元に戻すにはどうすればよいでしょうか。

コード:

- (IBAction)start:(id)sender {
        UIViewController* backToRootViewController = [[UIViewController alloc] initWithNibName:@"TabBarController" bundle:[NSBundle mainBundle]];
        [self.view addSubview:backToRootViewController.view];
}

これもうまくいかない

- (IBAction)start:(id)sender {
           [self.navigationController popToRootViewControllerAnimated:YES];
    }

編集

初回起動時にチュートリアルを開くには:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"];
if (!isAccepted) {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.viewController = [[APPViewController alloc] initWithNibName:@"APPViewController" bundle:nil];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
}

APPViewControllerチュートリアルです

編集

johnnelm9r の助けを借りて、現在のコードは次のようになります。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle: nil];

    IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IntroViewController"];

        BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"];
        if (!isAccepted) {
            [self.window.rootViewController presentViewController:introViewController animated:NO completion:nil];
        }

しかし、悲しいことに、アプリがクラッシュし、エラーは次のとおりです。

Application tried to present a nil modal view controller on target <UITabBarController: 0x175409d0>.'

また、警告:Incompatible pointer type assigning to 'ViewController' from 'UIViewController' in AppDelegate

4

2 に答える 2

0

*****アップデート****

私が何を意味するかを示すために、サンプル プロジェクトをアップロードしました。ここで見つけることができます: github リンク 頑張ってください!

**** 編集

あなたともっと話し合った後、私はあなたのviewDidAppearメソッドでこのコードに似たものを使用しようとすることをお勧めします。

BOOL didShowIntro = [[NSUserDefaults standardUserDefaults] boolForKey:@"showIntro"];

IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IntroViewController"];

if (didShowIntro)
    {
    [self presentViewController:introViewController animated:NO completion:nil];
    }

次に、提示されたコントローラーをチュートリアルのボタンから次のようにポップします。

[self dismissViewControllerAnimated:NO completion:nil];

チュートリアル ビュー コントローラーでボタンを押すときは、ユーザーの既定値を no に設定することを忘れないでください。そして、リレーションシップ セグエとして tabbarcontroller から navigationcontroller に移動してから、チュートリアルの後に表示するビュー コントローラーにルートとして移動していることを確認してください。明確にするために: ストーリーボードのチュートリアル ビュー コントローラーには接続しないでください。

さらに明確にするために、ストーリーボードには、ビューコントローラーに接続されたナビゲーションコントローラーと、何にも接続されていない別のビューコントローラーに接続された最初のビューコントローラーとしてnavbarcontrollerが必要です。:) そして、デリゲートのコードを必ず削除してください。

于 2014-04-29T19:24:55.373 に答える
0

rootViewController に移動するには

[self.navigationController popToRootViewControllerAnimated:YES];
于 2014-04-30T04:30:27.440 に答える