簡體   English   中英

popToViewController沒有動畫

[英]popToViewController not animating

伙計,我必須說,如果不是這個站點,我將沒有頭發,我現在可能會跳下橋。 好! 我的問題:

我在xcode 4.4中使用情節提要。 我有3個視圖控制器(確實有5個,但是我認為其他的都不相關)。 視圖控制器A推向視圖控制器B。視圖控制器B在其導航欄上有一個分段控件,其中包含2個分段和一個后退按鈕。視圖控制器B加載了選定的分段1。 當用戶選擇段0時,實例化視圖控制器C。 一切順利,一切順利。 您從A推到B,然后可以在按下時將其彈出到A。我的問題是當我popToViewController到包含視圖控制器A的數組列表時,它彈出了,但沒有動畫! 我知道您在想什么,“動畫:是假人!” 但是,動畫是嗎..嗯? 這是我的代碼:

這是視圖控制器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];
}
}

我知道當實例化時,您正在創建該視圖控制器的新實例以及創建新的導航堆棧(或類似的東西)。 我認為這可能與它有關。 無論如何,為什么地球上沒有動畫流行音樂? 我希望在當前的構建中實現一些東西,但是如果需要重新構建,那就這樣吧! 任何幫助是極大的贊賞。 我肯定已經完成了這一作業,但是沒有解決方案。

預先感謝所有人!

編輯:我應該補充一點,從視圖控制器B回到A的初始POP是動畫的。 但是,當您開始切換分段控件時以及切換到查看控件C時,回到視圖控制器A並不會使彈出窗口具有動畫效果。 因此,最初從A加載到B時,它會以成功的動畫彈出。 但是切換后,它不顯示動畫又彈出回到A,並且動畫方法為YES。

您是否只是想按A-> B-> C,然后再次跳回A,跳過B? 如果是這樣,則無需修改導航控制器的viewControllers屬性。

// in vcC.m ...

-(IBAction)Previous:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

課程參考中查看pop的不同品種。 您可以彈出一個,或彈出到根目錄,或彈出到歷史記錄中的特定VC。 這樣做的方法是讀取 viewControllers堆棧(而不是將其寫入),找到要彈出到的VC,然后使用代碼中的popTo ...方法。

但這聽起來像popToRoot是您所需要的。

您的情況仍然有些困惑,但這是另一個提示:您可以預先創建歷史記錄。 假設您要從VC0推送到VC​​2,並且在彈出時要從VC2彈出到VC1或VC0。 完全可行:

// in VC0.m, animated push to VC2
// push to vc1 invisibly
[self.navigationController pushViewController:vc1 animated:NO];
// we've made history!  now push visibly to vc2
[self.navigationController pushViewController:vc2 animated:YES];

要選擇彈出位置...

// in VC2.m
if (/* user needs a regular pop back to VC1 */) {
    [self.navigationController popViewControllerAnimated:YES];
} else // pop back two, to VC0
    NSArray *viewControllers = [self.navigationController viewControllers];

    // we're not assuming that vc0 is the root here, the top of the navigation stack
    // is at index=count-1.  self is at the top.  a regular pop is just below == count-2.
    // two pops is at count-3, and so on.
    NSInteger backBackIndex = viewControllers.count - 3;

    // in case we get here by some other pushing path, worst case pop is to the root
    backBackIndex = MAX(backBackIndex, 0);

    UIViewController *backBackVC = [viewControllers objectAtIndex:backBackIndex];
    [self.navigationController popToViewController:backBackVC animated:YES];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM