问题导航栏左侧的按钮

时间:2012-02-18 04:53:01

标签: objective-c ios uibutton uinavigationbar uibarbuttonitem

我在导航栏的左侧有一个按钮。我在该按钮附近也有一个UIButton。

现在,当我单击导航栏下方的按钮时,在许多情况下,单击nab栏上的按钮。

知道为什么会这样吗?有什么建议吗?

感谢。

图片:如果您点击红色按钮内的任何位置,导航栏的左上角按钮仍会被按下。

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];

3 个答案:

答案 0 :(得分:12)

UINavigationButtons具有比它的视图更大的可点击区域,Apple以这种方式使其易于使用。如果你真的想让两个按钮彼此靠近,你必须继承UINavigationBar,更具体地说,覆盖触摸事件,获取触摸坐标并按照你认为合适的方式行动。更多信息here

答案 1 :(得分:2)

请注意,如果Apple放大了navigationBar的左侧按钮(右侧没有),则表示可用性问题。它几乎是iphone设备上点击次数最多的按钮,因此人们可以本能地点按按钮(我从不看按钮,我只知道动作)。

请注意,如果您缩小触控区域,用户可能难以触及。

我的建议,对不起,将3或5px向下移动3个按钮。

答案 2 :(得分: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实例。希望这能解决你遇到的问题。