0

私は iOS プログラミングが初めてで、ECSlidingViewControllerを使用してスライド アウト メニュー (Facebook など) を作成しています。メニューで 2 つのビューが参照されているとします。

アプリを開くと、明らかにviewDidLoadトップ ビュー (メニューの最初のビュー) が呼び出されます。メニューを開いて 2 番目のビューを選択すると、それも呼び出さviewDidLoadれます。ただし、最初のビューに戻ると、そのメソッドが再度呼び出されますが、これは望ましくありません。いくつかのセットアップ コードがあり、可能であればビューを再インスタンス化したくありません。Facebook を見たことがありますが、ビューを元に戻しません。たとえば、ビューを切り替えて戻った後などに、ウォールのスクロール位置が記憶されているためです。

これは、選択時にトリガーされる私のデリゲート メソッドです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get identifier from selected
    NSString *identifier = [NSString stringWithFormat:@"%@", [self.menu objectAtIndex:indexPath.row]];

    // Add the selected view to the top view
    UIViewController *newTopVC = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    // Present it 
    [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = newTopVC;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];
} 

特定の VC が既に作成されている場合、どうにかして取得する方法はありますか? そうすれば、 のみが呼び出され、複数回呼び出されることはviewWillAppearありません。viewDidLoad

ありがとうございました。

4

1 に答える 1

1

ナビゲーションコントローラーを使用できます。2 番目のビューに移動する場合は、viewcontroller をナビゲーション ビュー コントローラーにプッシュし、戻る場合はナビゲーション コントローラーからポップすることができます。

編集:

ビューが 3 つある場合でも、navigationcontroller を使用できます。上記と同じロジック。ただし、ナビゲーション コントローラーで同じビュー コントローラーの二重インスタンスを削除することを忘れないでください。このページを見てください: uinavigationcontroller スタックから特定のビュー コントローラーを削除するには? . 特定のビューコントローラーが存在するかどうかを確認し、存在する場合は削除してから上にプッシュします。

于 2013-04-26T18:58:01.207 に答える