2013-01-24 32 views
1

我有2個viewControllers A和B.刪除實際的導航控制器,並推到另一個

從控制器我想推到控制器B,它的工作很好。

現在在控制器B中,我有'加'按鈕,將我推到另一個B控制器(同一個ViewController)。現在當im在secontr B viewController時,我推回按鈕,我應該被push到一個viewController。所以我想知道如何刪除ViewControler時,我推另一個viewController?

情況是這樣的:

A(推B) - > B(推B) - > B(推B) - > B(彈出B) - >一個

感謝您的幫助。

回答

2

試試這個,

id tempViewCont=nil; 
for(id viewCont in [self.navigationController viewControllers]) 
{ 
    if([viewCont isKindOfClass:[A class]]) 
    { 
     tempViewCont=viewCont; 
     break; 
    } 
} 

if(tempViewCont) 
{ 
    [self.navigationController popToViewController:tempViewCont animated:yes]; 
} 
+1

@ edzio27:另外,如果你有多個A控制器堆棧,你想彈出以後推A,那麼你需要以相反的順序遍歷循環(你需要使用for/while循環)。 –

+0

謝謝Ishu,爲此。我也在這個主題找到幫助http://stackoverflow.com/questions/2099319/how-to-remove-a-particular-view-controller-from-uinavigationcontroller-stack – edzio27

1

解決方案將是popToRootViewController: 呼叫,當你B3控制器上完成這個方法

因此,這將是: A(pushViewController B1) - > B1(pushViewController B2) - > B2(pushViewController B3 ) - > B3(popToRootViewController :) - > A

這對您有幫助嗎?

+0

我的A控制器不是rootViewController所以它不工作 – edzio27

+0

所以你可以使用這個解決方案:'[self。導航控制器popToViewController:視圖控制器動畫:是];' – Yanny

1

試試看

[self.navigationController popToRootViewControllerAnimated:YES]; 

或者

[self.navigationController popToViewController:A viewcontroller animated:yes]; 
0

你可以試試下面的,如果你是推視圖控制器A只有一次:

NSArray *tempArray = [self.navigationController viewControllers]; 
for (id viewController in tempArray) { 
    if ([viewController isKindOfClass:A]) { 
     [self.navigationController popToViewController:viewController animated:yes]; 
     break; 
    } 
} 

希望這會有所幫助。

+0

+1但是,就像接受的答案,這發現第一次出現「A」,如果你需要最後一次,你必須調整。顯然,如果你想要第一個,那就是最初的視圖控制器,那麼你只需要執行'popToRootViewControllerAnimated'。 – Rob

0

雖然所有其他答案都很好,但在我看來,問題是您是否應該從B推到另一個副本。對於我來說,這是通過你是否想從一個B跳到前面的B的問題來回答的。如果是這樣,那很好,並且當您想返回到A時,使用其他popToRootViewControllerAnimatedpopToViewController答案中的一個。

如果不是,你根本不應該從B推到自己的另一個副本。但是,如果您想讓用戶演示「讓我們再次使用」按鈕,您可以使用transitionWithView。例如,如果我們假設你有一堆UITextField控制在B和你有一個「添加另一個」按鈕,它可以做到以下幾點:

- (IBAction)onPressAddButton:(id)sender 
{ 
    // save the record here 

    // now, let's animate the resetting of the text fields 

    [UIView transitionWithView:self.view 
         duration:0.5 
         options:UIViewAnimationOptionTransitionCurlUp 
        animations:^{ 
         self.textField1.text = nil; 
         self.textField2.text = nil; 
         self.textField3.text = nil; 
        } 
        completion:nil]; 
} 

而且,順便說一句,如果你這樣做此方式,你現在不需要做任何事情就可以從B回到A.標準導航欄可以滿足我們需要的一切。

相關問題