もしこのサイトがなかったら、私は髪の毛がなく、おそらく今橋から飛び降りていたでしょう. わかった!私の問題:
xcode 4.4 でストーリーボードを使用しています。私は3つのView Controllerを持っています(実際には5つですが、他のものは無関係だと思います)。ビュー コントローラ A は、ビュー コントローラ B にプッシュします。ビュー コントローラ B のナビゲーション バーには、2 つのセグメントと戻るボタンを備えたセグメント化されたコントロールがあります。ビュー コントローラ B は、セグメント 1 が選択された状態でロードされます。ユーザーがセグメント 0 を選択すると、View Controller C がインスタンス化されます。最初のプッシュですべて順調です。A から B にプッシュされ、押し戻すと A にポップすることができます。私の問題は、ビュー コントローラー A を含む配列リストに popToViewController を入力すると、ポップしますが、アニメーション化されません。「Animate:YES ダミー!」というあなたの考えはよくわかります。しかし、アニメーションはそうです..ハァッ?これが私のコードです:
ビューコントローラーBで何が起こっているのか
-(IBAction)Previous:(id)sender{
[self.navigationController popViewControllerAnimated:YES];
}
- (IBAction)segmentSwitch:(id)sender;
{
if ([sender selectedSegmentIndex] == 0)
{
MapViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Map"];
[self.navigationController pushViewController:controller animated:NO];
}
else if ([sender selectedSegmentIndex] == 1) {
ListViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"List"];
[self.navigationController pushViewController:controller animated:NO];
}
}
ビューコントローラーCはこちら
-(IBAction)Previous:(id)sender
{
NSInteger index = -1;
ReportAppDelegate *appDelegate =
(ReportAppDelegate *)[[UIApplication sharedApplication]delegate];
MainOrangeTestViewController *orangeViewController = [appDelegate orangeViewController];
orangeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Orange"];
NSArray* newVCarray = [[NSArray alloc] initWithObjects:orangeViewController, nil];
self.navigationController.viewControllers = newVCarray;
for(int i=0 ; i<[newVCarray count] ; i++)
{
if([[newVCarray objectAtIndex:i] isKindOfClass:NSClassFromString(@"MainOrangeTestViewController")])
{
index = i;
}
}
[self.navigationController popToViewController:[newVCarray objectAtIndex:index] animated:YES];
}
- (IBAction)segmentSwitch2:(id)sender; {
if ([sender selectedSegmentIndex] == 0)
{
MapViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Map"];
[self.navigationController pushViewController:controller animated:NO];
}
else if ([sender selectedSegmentIndex] == 1)
{
ListViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"List"];
[self.navigationController pushViewController:controller animated:NO];
}
}
インスタンス化すると、そのView Controllerの新しいインスタンスを作成し、新しいnavスタック(またはそのようなもの)を作成していることがわかります。それと何か関係があるのではないかと考えています。それにもかかわらず、一体なぜポップをアニメーション化しないのでしょうか? 現在のビルドに何かを実装したいと思っていますが、再構築が必要な場合はそうしてください! どんな助けでも大歓迎です。私は間違いなくこれについて宿題をしましたが、解決策はありません。
事前にすべてに感謝します!
編集: ビュー コントローラー B から A に戻る最初の POP がアニメーション化されていることを追加する必要があります。ただし、セグメント化されたコントロールの切り替えを開始したときと、ビュー コントローラー C に切り替えたときに、ビュー コントローラー A に戻ってもポップはアニメーション化されません。したがって、最初に A から B にロードすると、アニメーションが成功してポップバックします。しかし、トグルの後、アニメーションなしで A に戻り、アニメーション化されたメソッドは YES です。