1

あなたに質問があります。ウォークスルー/チュートリアル画面とログイン画面を持つこのアプリに取り組んでいます。この各画面には、この部分をスキップして、登録を完了せずにアプリを直接使用するためのボタンがあります (サインインする前にテストできるようにするためです)。

ストーリーボードに表示されるコントローラー

ご覧のとおり、ストーリーボードを使用しています。NowPlaying04 ViewController は実際にはアプリそのものです。明らかに、ユーザーが登録されている場合は、ウォークスルーとサインイン プロセスをスキップして、その画面にすぐに戻ることもできます。

最初の質問は次のとおりです。これを構成する最善の方法は何ですか?

2 番目の質問は、そのナビゲーション コントローラーの外側に ViewController を作成する方法です。ご覧のとおり、NowPlaying04 ViewController は上部のナビゲーション バーを継承しています。これは私が望んでいないことです。私はそれを必要としません。

私の質問を理解していただければ幸いです。どんな助けにも感謝します。プログラムで、または物をドラッグして、すべてのソリューションで問題ありません。重要なことは、正しく機能することです。:-)

4

5 に答える 5

2

ナビゲーション バーを非表示にするだけの場合は、次のコードを ViewController.m に追加します。

- (void)viewWillAppear:(BOOL)animated{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}

特定の ViewController にジャンプするには、次のコードを使用できます。

NSInteger index = -1;
NSArray* arr = [[NSArray alloc] initWithArray:self.navigationController.viewControllers];
for(int i=0 ; i<arr.count ; i++)
{
    if([[arr objectAtIndex:i] isKindOfClass:NSClassFromString(@"Your_ViewController_Class_Name")])
    {
        index = i;
    }
}
[self.navigationController popToViewController:[arr objectAtIndex:index] animated:YES];
于 2013-11-06T09:48:38.797 に答える
1

質問1:

スキップ ボタンの実装を設定して、NowPlaying04 ビュー コントローラーに移動できます。

        UIButton* skipButton    =   [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [skipButton addTarget:self action:@selector(skip) forControlEvents:UIControlEventTouchUpInside];


-(void)skip
{
    NowPlaying04* nowPlayingController  =   [[NowPlaying04 alloc] init];
    [self.navigationController pushViewController:nowPlayingController animated:YES];
}

質問2:

NowPlaying04 で非表示のナビゲーション バーを設定します。NowPlaying04 の init メソッドまたは viewWillAppear メソッドで、ナビゲーション バーを非表示に設定するだけです。

navBar.hidden = YES; 
于 2013-11-06T09:50:07.977 に答える
1

@ user1447316、あなたが私のアイデアを気に入ってくれてうれしいです。ただし、ローカル変数 userLoggedIn の代わりにstandarduserdefaultsを使用したいと思います。ハイスコ​​ア、ログイン情報、プログラムの状態など、ユーザーがアプリを閉じた後でも必要な少量のデータを保存したい場合は、この方法で保存すると便利です。

ユーザーがアプリケーションの任意の場所からログインすると、次の方法でデータを保存できます。

NSNumber *userLoggedIn = [NSNumber numberWithBool:NO];
[[NSUserDefaults standardUserDefaults] setObject:userLoggedIn forKey:@"log"];

そして、次を取得して確認できます。

  NSNumber *userLoggedIn = [[NSUserDefaults standardUserDefaults]objectForKey:@"log"];
  if ([userLoggedIn boolValue]){
         //user logged
  }

ex この素晴らしいテクニックにより、最初の起動を検出し、ユーザーにいくつかのチュートリアルを表示することさえできます:)

于 2013-11-06T14:46:12.240 に答える
0

したがって、AppDelegate.m を使用して、この問題の解決策を見つけた可能性があります。ストーリーボードを使用している場合は、StoryboardID を使用してそれらを参照しているため、ViewController クラスを AppDelegate.h にインポートする必要はありません。次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    BOOL userLoggedIn = NO;
    if (userLoggedIn) {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"NowPlaying04"];
        [self.window setRootViewController:controller];
    } else {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Start00"];
        [self.window setRootViewController:controller];
    }
    [self.window makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

明らかに、InterfaceBuilder/Storyboard プロパティを使用して、View Controller に識別子を設定する必要があります。BOOL 変数 userLoggedIn に別の値を設定すると、アプリは相対的な rootViewController で読み込まれます。

ストーリーボードは次のようになります。

編集後の絵コンテ

これははるかに組織化されています。NowPlaying04 画面で isInitialViewController にフラグが立てられます。しかし、AppDelegate は、isLoggedIn BOOL 変数に基づいて、それに移動するか、NavigationController (ID Start00 を持つ) に切り替えるかを決定します。

さまざまな rootViewControllers を使用するアイデアについて、@НаильГалиаскаров に感謝します。

于 2013-11-06T14:03:43.973 に答える