2011-02-28 105 views
0

問候,iPhone:捕獲後退按鈕事件

我有捕獲後退按鈕的事件下面的代碼:

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStylePlain target:self action:@selector(doLogout:)]]; 

這裏是我的doLogout:

-(void) doLogout:(id)sender{ 
    NSLog(@"hi"); 
} 

一切編譯和運行良好,後退按鈕文本更改爲「註銷」。

唯一的問題是,我的doLogout函數永遠不會被調用!

我該怎麼辦?我一直停留在此,現在一個小時...;(

提前許多感謝,

+0

未解決您的問題,但您編寫的'setBackBarButtonItem'方法會泄漏內存。你分配一個新的'UIBarButtonItem',但從不釋放它。 – kubi 2011-05-04 12:42:15

回答

0

官方文檔:

當此項目是導航欄,當返回項目它是頂部項目下面的下一個項目 - 它可以表示爲導航欄上的後退按鈕,使用此屬性可以指定後退按鈕您設置的後退按鈕項目的目標和動作應該爲零​​默認值是顯示導航項目標題的欄按鈕項目。

+0

哦對,所以我沒有希望我猜... – Eamorr 2011-02-28 18:27:45

+0

我認爲你可以隱藏默認的後退按鈕並編寫你自己的按鈕... – Alessandro 2011-02-28 20:15:18

+3

我會實現viewWillDisappear:相反... – amattn 2011-03-01 05:19:36

0

Inst試圖捕捉「後退按鈕事件」的ead爲什麼不只是試圖凌駕UIViewController viewDidUnload

+0

他可能想要一些特殊的邏輯當用戶明確按下後退按鈕時,而不是視圖消失時。當您按下viewController時,當您按下視圖控制器 – 2011-07-27 20:59:20

+0

@Hisoka時,視圖可能會消失,未調用「viewDidUnload」。 (除非你有內存警告,但這是另一個話題)View僅在從內存中移除時才被卸載,通常在離開(返回按鈕)時發生。另一種解決方案可能是使用'UINavigationControllerDelegate' – 2011-07-28 10:03:04

0

而不是在頂部視圖控制器上設置backBarButtonItem,你可以做的是在子視圖控制器上設置leftBarButtonItem。這可以是任何任意的條形按鈕項目,並且所有的動作消息都應該像平常一樣傳遞。因爲這取代了後退按鈕,所以您必須確保您在其中一個操作方法中手動彈出子控制器。