1

私はたくさんのサブクラスを持っています (それらを , ,UIViewControllerと呼びましょう)。基本的には、クラスがインスタンス化され、ユーザーが何らかのタイプのボタンを押して起動するという考え方です。次に、起動のボタンで。そしてもちろん、私は に戻ることができるはずです。MainFormDetailFormMoreMinorDetailsAppDelegateMainFormMainFormDetailFormDetailFormMoreMinorDetailsMainForm

UINavigationController視界のどこにもオブジェクトがないことに注意してください。上記の方法で s
間を移動するために受け入れられたパターンは何ですか?UIViewController

それとも、私は間違った方法でそれを行っていますか? XCodeまたはMonoTouchベースの説明に満足しています。

4

2 に答える 2

2

を使用しUINavigationControllerて、ナビゲーション バーを非表示にすることができます。

self.navigationController.navigationBar.hidden = YES;

次に、ボタンのアクションで、次のビュー コントローラーをプッシュします。

-(void)buttonAction:(id)sender
{
    NextViewController *nextViewController = [[NextViewController alloc] init];
    [self.navigationController pushViewController:nextViewController animated:YES];
}

戻るには、

-(void)goBack
{
    [self.navigationController popViewControllerAnimated:YES];
}

特定のビュー コントローラに移動するには (ナビゲーション コントローラのスタックにいつプッシュされたかを正確に知る必要があります):

-(void)goToViewController
{
    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
}

または、ルート ビュー コントローラーにポップするには

[self.navigationController popToRootViewControllerAnimated:YES];

このようにして、UINavigationControllerの機能を取得し、ビュー内のすべてのスペースを保持します。

于 2012-09-05T11:01:48.003 に答える
1

アングリーハッカー、

私の簡単な提案は、zoul one に従うことです。あなたが望むものを達成する最も簡単な方法は、 を作成し、UINavigationControllerそれを他のコントローラーのコンテインメント コントローラーとして使用することだと思います。

したがって、方法は で を作成し、UINavigationControllerそれAppDelegateを として設定することができrootViewControllerますwindow。を作成するときUINavigationControllerに、ルート コントローラー (この場合はMainForm) を渡すことができます。

MT では次のようになります (手で書いたのでコードを信頼しないでください)。

private UINavigationController navController;
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
    navController = new UINavigationController(new MainForm());
    window.RootViewController = navController;
    window.MakeKeyAndVisible ();

    return true;
}

これで、アプリを起動するとMainFormのビューが表示され、さまざまなコントローラー間を移動できるようになります。

たとえば、次のようMainFormに移動できます。DetailForm

this.NavigationController.PushViewController(new DetailForm(), true);

内も同様DetailFormですMoreMinorDetails

MoreMinorDetailsfromをDetailForm使用するなど、一歩戻るには

this.NavigationController.PopViewControllerAnimated(false);

ルート コントローラ ( MainForm)に移動するには、DetailFormまたはMoreMinorDetails使用します。

this.NavigationController.PopToRootViewControllerAnimated(false);

スペースについては、問題ありません。あなたには2つの方法があると思います。1 つ目は、ナビゲーション コントローラー バー内で作成したバー アイテムを移動することです。各コントローラーで、どのボタンを表示するかどうかを決定できます。2 つ目は、ナビゲーション バーを完全に非表示にして、作成済みのボタンを使用することです。

どちらの方法でも、これらのボタンにアクションをアタッチして、コントローラー間のナビゲーションを許可できます。さらに、最初を選択すると、ナビゲーション バーの戻るボタンを非表示にすることもできます。

覚えておくべき簡単な注意事項は次のとおりです。

ナビゲーション バーは に固有であるためUINavigationController、ナビゲーション コントローラーにプッシュするすべてのコントローラーに対してバーの状態が維持されます。この概念を説明するために、A と B という 2 つのコントローラーがあるとします。最初に A を押し、そのViewWillAppearメソッドでボタンを非表示にします。B を押しても、ボタンは表示されません。B のボタンを再表示したい場合は、そのViewWillAppearメソッド (以前のように) で遊ぶことができます...

遊びたくない場合は、クラスUINavigationControllerによって提供される新しいビュー コントローラー コンテインメント機能を確認する必要があります。UIViewControllerこれは iOS >= 5 からのみ適用されます。同じUINavigationControllerメカニズムの効果を得ることができますが、達成するのがより困難になる可能性があります。

それが役立つことを願っています。

于 2012-09-05T10:47:03.490 に答える