2012-07-22 66 views
0

我有一個應用程序,加載時,加載基於選項卡的應用程序,從而所有標籤工作正常。然而,在第一個選項卡中,加載的視圖有一大堆按鈕。我已經寫了這些按鈕的方法,所以當按下時,他們推動一個新的子視圖(.xib),這工作正常。刪除當前子視圖ios

但是,當在這些新的子視圖中,我有一個後退按鈕,它有自己的方法。我想要這個按鈕刪除視圖並返回到原始視圖。這裏是FirstViewController.m的代碼。

請記住,即使它處理不同的.xib文件,該文件仍保留所有代碼。基本上它首先推動FirstView,然後當按下按鈕時,它將推動E87view.xib,.xib的代碼仍在第一個viewcontroller文件中。

-(IBAction) backButtonPressed { 
    [self showAll]; 
    backButton.hidden = 1; 

    for (UIView *subview in [self.view subviews]) { 
     [subview removeFromSuperview]; 
    } 
    [self showAll]; 
} 

-(IBAction) E87Pressed { 
    //[self hideAll]; 

    E87view *e87view = [[E87view alloc] initWithNibName:@"E87view" bundle:[NSBundle mainBundle]]; 

    [self.navigationController pushViewController:e87view animated:YES]; 
    [self.view addSubview:e87view.view]; 
} 

所以只是重申一下,當我按下按鈕E87上的加載FirstView.xib這將推動新的視圖E87view.xib第一種觀點。但是,當我按下這個新加載的E87view上的後退按鈕時,它將訪問上述功能並刪除視圖,但也會從FirstView.xib中刪除所有設置,實際上留給我一個空應用程序。

希望這是有道理的,我可以漫步一下。

問候,

路易斯

+0

在你說的文字中,你使用了一個tab控制器。你的代碼說你正在使用導航控制器。您是在一個選項卡中使用導航控制器還是選項卡控制器出錯? – Pfitz 2012-07-23 06:35:59

+0

不,它是一個選項卡式應用程序,委託確實有一個tabBarController。 – 2012-07-23 12:09:28

回答

2

相反除去每個單獨的子視圖,只是使用

[self.navigationController popViewControllerAnimated: YES]; 

導航控制器移除的ViewController而且這條線是不必要

[self.view addSubview:e87view.view]; 
+0

我假設你的意思是添加行 [self.navigationController popViewControllerAnimated:YES]; 到後退按鈕?它不起作用。而增加的視圖行是當按下e87時將視圖帶到前面的。 – 2012-07-22 16:16:31

+0

您確實不需要將e87view.view添加爲子視圖,導航控制器將在調用pushViewController:animated:時顯示viewController的視圖。當您調用popViewControllerAnimated時,會發生同樣的事情:它將恢復爲預覽viewController視圖。如果不起作用,問題可能來自其他地方。 – 2012-07-22 17:19:29

+0

對,我認爲我們的電線越來越多。我的FirstViewController文件包含FirstView.xib上所有按鈕的所有代碼,以及我希望在其所在位置顯示的每個視圖,例如e87view.xib。該行, [self.view addSubview:e87view.view]; , 將子視圖e87view帶到前面,只有後退按鈕,該視圖爲空白。後退按鈕應該刪除該視圖。我如何刪除該視圖?後退按鈕是一個按鈕,我在那裏放置了一個UIButton,它連接到FirstViewController中的上述函數。 – 2012-07-22 17:45:53

0

看着你的代碼,有些事情讓我困惑:

1)爲什麼要將viewController e87view的子視圖再次添加到主視圖之後將視圖控制器推到屏幕上?在推送viewController e87view時,應該爲你處理每件事情。 viewController將被添加到navigationController堆棧中,並且該viewControler的視圖也應該被呈現。

所以調用

[self.navigationController pushViewController:e87view animated:YES]; 

[self.view addSubview:e87view.view]; 

之後將兩次添加視圖到屏幕。

2)爲什麼要編寫自己的代碼來回溯?雖然這可以完成..你確定這就是你想要做的?通常在將viewController e87view推入導航控制器後,會自動出現一個後退按鈕如果您的viewController e87view有一個標題

+0

不知道你的意思?我發佈的代碼是兩個不同的功能。一個適用於E87按鈕,另一個適用於出現在不同的後退按鈕如果我註釋掉這行[self.view addSubview:e87view.view],那麼當我按下E87按鈕時,什麼都不會發生。 本質上,當我離開它時,那就是將E87view.xib帶到前面的那一行。在這個新的xib中,我帶了前面我添加了另一個UIButton,這個按鈕連接到我的帖子中的第一個函數,我只是想要它刪除視圖,並返回到原始視圖 – 2012-07-22 17:57:44

+0

幫助我理解這一點。因此,你有上面這段代碼,它包含在** firstViewController **文件中,並且那個firstViewController是當你點擊第一個Tab時加載的viewController,並且..那個backButtonPress ed方法處理從firstViewController的某個按鈕加載的每個新視圖的卸載? – 2012-07-22 18:11:21

+0

這樣的事哈哈我混淆了我認爲的東西,原諒我。正確的是,我現在所做的是在E87view.h/.m中聲明並實現後退按鈕。我已經添加了一個UIButton到E87view.xib。 對,就是這樣。當應用程序啓動時,它會調出MainWindow.xib和FirstView.xib,其後面的代碼由FirstViewController類處理。在這個類中,當我按下UIButton E87時,它將E87view.xib推到屏幕上(維護標籤),並且在這個xib上我有另一個UIButton鏈接到backButtonPressed函數,我剛搬到了E87view類。 – 2012-07-22 18:17:15