2013-04-17 89 views
16

我正在爲UINavigationBar的自定義欄按鈕查看,我使用下面的代碼定製的UIBarButtonItem在UINavigationBar的

UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView]; 
[backButton setTarget:self]; 
[backButton setAction:@selector(BackBtn)]; 
checkIn_NavBar.topItem.leftBarButtonItem = backButton; 

的問題是它沒有調用它的行動。我做錯了什麼?

+0

我可以在您的BackBtn方法上看到嗎? – Arthur

+0

什麼是checkIn_NavBar?你有強烈的參考意見嗎?爲什麼不使用self.navigationItem.leftBarButtonItem? –

+0

嘗試使用[checkIn_NavBar setLeftBarButtonItem:backButton];或self.navigationItem.leftBarButtonItem = backButton; – Bonnie

回答

37

從蘋果文檔:
使用指定的自定義視圖初始化一個新的項目。

- (id)initWithCustomView:(UIView *)customView 

參數 customView 表示項的自定義視圖。 返回值 具有指定屬性的新初始化項目。

討論: 通過此方法創建的條形按鈕項目不會響應用戶交互調用其目標的動作方法。相反,酒吧按鈕項目期望指定的自定義視圖來處理任何用戶交互並提供適當的響應。

解決方案:「使用背景圖像創建按鈕(將動作設置爲該按鈕)以及使用此按鈕的init bar按鈕」。例如:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,25,25) 
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
+4

好的答案,但是:文件說:「當創建一個自定義按鈕 - 這是一個類型爲UIButtonTypeCustom的按鈕時,最初將按鈕的框架設置爲(0,0,0,0)。你的界面,你應該更新框架到一個更合適的價值。「所以你應該明確地設置按鈕的框架,否則你將不會看到任何東西!b v –

+0

@ReinhardMänner - 你救了我的男朋友!此外,這是一個框架的可怕的默認值... – katzenhut

+0

@ katzenhut - 很高興我可以幫助你,你完全正確的默認值... –

1
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(graphButton)]; 
self.navigationItem.rightBarButtonItem = graphButton; 

- (void)graphButton{ 
} 
+0

結果在兩個重疊的圖像 – Hassy

+0

?重疊?你的意思是在導航欄右側有按鈕了嗎? – brianLikeApple

+0

刪除您的代碼並複製我的代碼並替換按鈕圖像名稱。無論你喜歡什麼,改變選擇器功能。它應該工作! – brianLikeApple

1

我完成了這個使用下面的代碼:

UIButton *nxtBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal]; 
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside]; 
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)]; 
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn]; 

checkIn_NavBar.topItem.rightBarButtonItem=nextButton; 
+1

上放置自定義按鈕視圖來完成此操作。因此,您可以在按鈕上添加一個按鈕。這聽起來不對。 – Popeye

相關問題