我在导航栏的左侧有一个按钮。我在该按钮附近也有一个UIButton。
现在,当我单击导航栏下方的按钮时,在许多情况下,单击nab栏上的按钮。
知道为什么会这样吗?有什么建议吗?
感谢。
图片:如果您点击红色按钮内的任何位置,导航栏的左上角按钮仍会被按下。
导航栏按钮的代码:
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];
答案 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
实例。希望这能解决你遇到的问题。