2012-02-18 79 views
3

導航欄左側有一個按鈕。我也有一個靠近那個按鈕的UIButton。使用導航欄左側的按鈕發出問題

現在,當我點擊導航欄下方的按鈕時,很多情況下,點擊了NAB欄上的按鈕。

任何想法爲什麼會發生這種情況?有什麼建議麼 ?

謝謝。

image:如果你點擊紅色按鈕內的任何地方,導航欄的左上角按鈕仍然被按下。對於導航欄按鈕

enter image description here

代碼:

UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)]; 
[leftButton setShowsTouchWhenHighlighted:NO]; 
[leftButton setImage:[UIImage imageNamed:@"deals.png"] forState:UIControlStateNormal]; 
[leftButton setImage:[UIImage imageNamed:@"deals_down.png"] forState:UIControlStateSelected]; 
[leftButton setImage:[UIImage imageNamed:@"deals_down.png"] forState:UIControlStateHighlighted]; 
[leftButton addTarget:self action:@selector(dealsButtonPressed:) forControlEvents:UIControlEventTouchDown || UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:leftButton] autorelease]; 
[leftButton release]; 
+1

您可以請發佈此方案的圖片/圖像。 – Mrunal 2012-02-18 05:00:35

+2

沒有任何代碼或截圖,最好的猜測是你實際上意外地敲擊了導航欄上的按鈕。 – 2012-02-18 05:23:45

+0

@PeterSarnowski:現在給出的數字。謝謝 – Ahsan 2012-03-08 23:51:14

回答

12

UINavigationButtons有比它的視圖一個更大的可點擊區域,蘋果做出這種方式,易於使用。如果你真的想要有兩個彼此靠近的按鈕,你必須繼承UINavigationBar,更具體地說,覆蓋觸摸事件,獲得觸摸座標並按照你認爲合適的方式進行操作。更多信息here

+0

「蘋果公司以此方式實現了易用性」 - 最好遵守蘋果公司和降低你自己的按鈕,真的。如果您將自己的按鈕放在靠近導航欄的位置,您只是要求人們錯誤地按錯按鈕。 – Danra 2012-03-15 21:16:11

1

它看起來像是如何初始化UIButton實例的問題。通常,我們會在您的情況下使用[UIButton buttonWithType:custom];

this answer,他們解決了以下類似的問題:

UIImage *myImage = [UIImage imageNamed:@"paw.png"]; 
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setImage:myImage forState:UIControlStateNormal]; 
myButton.showsTouchWhenHighlighted = YES; 
myButton.frame = CGRectMake(0.0, 0.0, myImage.size.width, myImage.size.height); 

[myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 
self.navigationItem.rightBarButtonItem = rightButton; 

[rightButton release]; 
[myButton release]; 

這不是你要找的代碼,但它表明你如何正確實例化一個UIButton實例。希望這將解決你遇到的問題。

+0

所以,換句話說,我需要將類型設置爲自定義並分別設置幀。這就是你所暗示的嗎? – Ahsan 2012-03-12 21:50:32

+0

對不起,沒有幫助:( – Ahsan 2012-03-12 21:54:32

+0

這就是我所暗示的 - 按鈕應該只用'buttonWithType:'實例化。我很抱歉聽到這不是你的問題 - 祝你好運! – 2012-03-13 01:01:49

2

請注意,如果Apple放大導航欄的左側按鈕(右側不是),則會出現可用性問題。它幾乎是iphone設備中最被點擊的按鈕,所以人們有能力以本能的方式輕敲按鈕(我從不看按鈕,我只知道這個動作)。

請記住,如果您減少觸摸區域,用戶可能會遇到困難。

我的建議,對不起,將下移3或5px下你的3個按鈕。

+0

嘆息,這麼多upvotes技術答案(這是值得的),對於可用性相關的答案如你的答案很少 – Danra 2012-03-15 21:18:21

+0

謝謝;)這是我的工作 – Martin 2012-03-16 09:42:33

+0

你錯了。向右按鈕與左側相同。 – Tamara 2013-03-01 04:57:02