0

そこで、このチュートリアルを使用して、iOS アプリにスライド メニューを実装しました。ただし、ホーム セル ボタンを押しようとすると、ホーム コントローラーが更新され、私の理解では、古いコントローラーの上に別のバージョンのコントローラーが配置されます。この状況が理想的ではない理由を理解できるように、私はゲームを構築しています。つまり、ユーザーがスライド アウト メニューを使用するたびに新しいゲームが作成されます。この更新が行われないようにする方法、または代替の可能な回避策はありますか?

4

1 に答える 1

1

チュートリアルの内容に基づいて、メニュー内のセル項目ごとにセグエが実行されます。すでに存在するView Controllerのリロードを防ぐためにすべきことは、現在のView ControllerがdidSelectRowAtIndexPath:選択したものと等しいかどうかを確認することを除いて、 でセグエを実行することです。メニュー コントローラの可能なビュー コントローラ プロパティをすべて作成し、メニュー コントローラをルート コントローラにする必要があります。このようにして、最後のView Controllerが選択されたものであるかどうかを検出できます。デリゲート メソッドdidSelectRowAtIndexPath:でメニューを管理するコントローラーで、これを追加します。

menuController.h 内

@property (retain, nonatomic) OneViewController *thatViewController;

menuController.m の didSelectRowForIndexPath:

NSArray *segueIdentifiers = @[@"firstSegueID",@"secondSegueID",...];//list of all segues possible in order matching the rows, so row0 would associate to the firstSegueID
if ([segueIdentifiers objectAtIndex:indexPath.row] isEqualToString:@"firstSegueID"])
{
    BOOL isInstantiated;
    isInstantiated = NO;
    if (self.thatViewController == nil) //or some way to check if it was already instantiated like testing a property of the controller
    {
        self.thatViewController = [[OneViewController alloc] init]; //or whatever init class method you like
        [self.thatViewController.property setThemHere];

        isInstantiated = YES;
    }

    [self presentViewController:self.thatViewController animated:YES completion:^{NSLog(@"presented that view controller, was reloaded: %@",isInstantiated);}];
}

EDIT1:基本的に、コントローラーを一度インスタンス化します。

次に、オブジェクトのインスタンス化を oneViewController.m の適切な場所に配置します。たとえば、揮発性にしたくないオブジェクト (ホームコントローラー上のすべてであると想定しています) は、ここで割り当てて初期化する必要があります。これにより、ほとんどの UI メカニズムをプログラミングに移行し、ストーリー ボードから離れる必要があります。セグエを実行すると、新しいView Controllerが割り当てられて作成され、実行されると思いますperformSegueWithIdentifier:animated:

EDIT2: コードの入力ミスに気付きました。最新のリビジョンが含まれているはずです。混乱して申し訳ありません。

EDIT3:メソッドがスライドする方法を引き続き保持したい場合は、ビューコントローラーのアニメーション表示と非表示にあまりこだわっていません。ただし、この投稿のメソッドを実行して厳密にインスタンス化するだけで、同じロジックを適用できます。気にしたくない場合:

if (! self.thatViewController) {
    self.thatViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // set this property in the story board
}

次に、まったく新しいコントローラーを割り当てることなく、セグエを実行できます。

于 2014-05-09T22:12:58.143 に答える