2012-08-10 83 views
3

我從其他視圖控制器通過推送其表格視圖單元格啓動viewController。現在在第二個視圖控制器上,我有一大堆控件,主要是測試字段。我想通過使用第二個視圖控制器中提供的默認後退按鈕,因此它將成爲第一個視圖控制器的標題,並且像我說的默認值一樣記住,所以我不想爲後面創建自己的按鈕在第二個視圖控制器上。所以想要檢測第二個視圖控制器是否正在退出或消失或將消失,並基於某些條件阻止它回到原來的調用者視圖控制器。我原本以爲可以在這裏完成:從消失中停止視圖

-(void) viewWillDisappear:(BOOL)animated { 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) 
    { 
     // So back button was pressed on the second view controller, so how do I stop it 
     // here from going back to the original view controller. 
    } 
} 

或者我該怎麼做?我似乎無法找到一個視圖控制器返回類型BOOL方法來調用並停止它。

謝謝。

+0

所以你要啓用/禁用後退按鈕? – 2012-08-10 05:47:47

+1

不,我希望自從新的objective-c以來,當視圖正在消失,然後取消它從消失,所以它保持在同一視圖,而不創建我自己的自定義後退按鈕,並不得不通過控制器。 – 2012-08-10 06:09:49

+1

顯然基於下面的答案,它看起來像沒有其他方式,但創建一個自定義按鈕。 – 2012-08-10 06:51:19

回答

7

請注意,該方法被稱爲viewWillDisappear,而不是viewShouldDisappear,所以蘋果不會讓你停止視圖消失在這一點。而從用戶的角度來看,按下後退按鈕的確應該把它們帶回來。相反,您可能會考慮在不允許的情況下隱藏後退按鈕。

+0

我想禁用並啓用後退按鈕,但是基於第二個視圖控制器上編輯的內容,我真的想先顯示一些描述性警報。這就是爲什麼我想要一些如何取消回來。而不是用戶不知道什麼是錯的,爲什麼後退按鈕被啓用,或者我將警報與我的文本字段的事件綁定。 – 2012-08-10 05:37:30

+1

好吧,我認爲你唯一的選擇就是製作你自己的後退按鈕(setLeftBarItem),並將它指向你自己的例程。您仍然可以從導航堆棧中的父視圖控制器中取得其名稱,以使其名稱與以前相同。 – mackworth 2012-08-10 05:48:26

+0

感謝@macworth顯然你可以告訴我這是新的,真的希望會有一種卸載類型的視圖事件,我可以像其他類型的事件一樣取消,因爲我發現返回類型是BOOL,所以可以有很容易通過返回NO。 – 2012-08-10 06:00:47

0

對不起,我不擅長英語,所以閱讀這麼長的文字對我來說有點困難。我只能得到你想要沒有按鈕就回去。我知道navigationController有一個方法返回到前一個視圖。

+0

沒有不正確的@Lin,我想停止默認的後退按鈕,如果我想不創建我自己的後退按鈕。 – 2012-08-10 05:39:23

+0

你想改變默認後退按鈕的行爲?我有一個方法:設置一個按鈕不能在默認按鈕上看到,它做你想做的,然後啓用它,如果你不想使用默認按鈕,禁用它,如果你不想回去作爲默認值。 – 2012-08-10 05:53:35

+0

林,根據@ mackworth的評論,我不認爲我想要做什麼是可能的,所以我會使用自定義按鈕。 – 2012-08-10 05:59:02

0

製作自定義後退按鈕並使用self.navigationItem.hidesBackButton=YES 將目標添加到自定義後退按鈕並隨意使用。當你想移動視圖時,你可以使用[self.navigationController popViewcontroller]

1

您不能阻止視圖控制器關閉,但您可以模擬它。

這條線將替換按鈕關閉按鈕將調用一個自制的功能

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(closeBtn)]; 

所以,你將能夠關閉視圖,如果你想:

- (void) closeBtn 
{ 
    bool shouldClose=true; 
    // Your conditions here 
    if (shouldClose) [self dismissViewControllerAnimated:YES completion:nil]; 
}