2

名前の3つのViewControllerを持つ1つのアプリケーションを作成します:(ViewController、ViewController2、ViewController3)ViewControllerには、ドキュメントフォルダー内のファイルをチェックするためのボタンが1つ存在するか、ダウンロードします。たとえば、ファイルがドキュメントフォルダーに存在するかどうかを最初に確認するには、ViewController3に移動しますそれ以外の場合は、ViewController2 に移動してダウンロードします。

したがって、ViewController2 はダウンロード用であり、ダウンロード ステータスを表示するための UILable & UIProgress があります。このページにファイルが存在しない場合は、ダウンロードして ViewController3 に移動します。

ViewController3はショーファイル用です。(これらのページは、下の画像のようにプッシュ セグエで接続されます)

任意のページに移動して戻るボタンをクリックすると、前のページに戻りますよね?? 最初のページのボタンをクリックすると、ファイルが存在せず、2番目のページでダウンロードが完了し、ダウンロードが完了してページ3に移動します.3ページの戻るボタンをクリックすると、ページ1ではなくページ2に移動します!!!!

私は絵コンテで働きます。

ここに画像の説明を入力

4

1 に答える 1

3

これを実現するには、ViewController3 で戻るボタン イベントをインターセプトし、unwindSegues を使用します。戻るボタン イベントをインターセプトする方法については、この質問に対する William Jockusch の回答を参照してください。

この特定のケースでアンワインド セグエを使用するには、次のことを行う必要があります。

1)ViewController1で次のようなメソッドを作成します

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
    NSLog(@"Rolled back");
}

2) ストーリーボードのズームアウトで、ViewController3 から ViewController3 シーンに含まれる左側の「終了」緑色のボックス (赤いボックスの First Responder とすべてのコントローラー ビューのサブビューと共に) に ctrl キーを押しながらドラッグします。アンワインド セグエを接続する IBAction を尋ねるポップアップ ウィンドウが表示され、unwindToThisViewController作成したばかりのアクションを選択できるはずです。これにより、アンワインド セグエが作成されます。

3) シーン ボックスからこのアンワインド セグエを選択し、「unwindToStart」などの ID を指定します。

4) 最後に、ViewController3 クラスで、viewWillDisappear次のようにメソッドをオーバーライドします。

-(void) viewWillDisappear:(BOOL)animated 
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
        [self performSegueWithIdentifier:@"unwindToStart" sender:self];
    [super viewWillDisappear:animated];
}

これにより、戻るボタン イベントがインターセプトされ、ViewController1 に展開されます。

編集: アンワインド セグエは iOS 6 以降でのみサポートされているため、以前のバージョンの iOS でこの機能が必要な場合、唯一の方法は、ViewController3 の viewDidLoad の NavigationController スタックから ViewController2 を手動で削除することだと思います。次のコードのようなことを行う必要があります。

- (void)viewDidLoad
{   
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    for(UIViewController* vc in self.navigationController.viewControllers)
    {
        if ([vc isKindOfClass:[ViewController2 class]]) {
            [viewControllers removeObject:vc];
            break;
        }
    }
    self.navigationController.viewControllers = [NSArray arrayWithArray:viewControllers];
    // Do any additional setup after loading the view.
}
于 2013-05-09T13:07:06.333 に答える