带按钮的iPhone自定义导航栏不点击
我有一个iPhone/iPad的通用应用程序,我想有一个自定义导航栏,导航栏的上半部分包含我们公司的标志,下半部分是标准导航栏。带按钮的iPhone自定义导航栏不点击
我想出了如何做到这一点,在下面的代码中显示,但我的UIButton“logosButton”并不总是响应被点击,它看起来好像只有某些部分的按钮是活跃的,而其他人不做任何事情所有...我不明白为什么这是。
- (void)viewDidLoad {
[super viewDidLoad];
[[self view] addSubview: navController.view];
float width = IS_IPAD ? 768.0f : 320.0f;
float logosHeight = IS_IPAD ? 20.0f : 20.0f;
float barHeight = IS_IPAD ? 32.0f : 32.0f;
self.navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, logosHeight, width, barHeight)];
UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, logosHeight)];
UIButton *logosButton = [[UIButton alloc] init];
[logosButton setBackgroundImage:[UIImage imageNamed:@"logo_bar_alone.png"] forState:UIControlStateNormal];
[logosButton setBackgroundImage:[UIImage imageNamed:@"logo_bar_alone.png"] forState:UIControlStateHighlighted];
[logosButton addTarget:self action:@selector(logosButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[logosButton setFrame: CGRectMake(0, 0, width, logosHeight)];
[tempView addSubview: logosButton];
[[self view] addSubview: tempView];
[tempView release];
[[self view] addSubview: self.navBar];
self.navItem = [[UINavigationItem alloc] initWithTitle: @"Home"];
[self.navBar pushNavigationItem:self.navItem animated:NO];
}
的方法:logosButtonClicked
也解雇每一个现在,然后当我点击的UIButton,但我很清楚我点击某个点在那里什么也没有发生在所有...
很沮丧,我不似乎,看到一个模式在哪里它的活跃,但有人可以请帮助在这里?
编辑
我想我刚才穿过的东西绊倒了,我改变了按钮的UIButtonTypeRoundedRect并摆脱了图像的(并且也使得大),看来,我无法点击底部或按钮圆角处的按钮顶部。所以中间的矩形部分是我可以点击的唯一部分...为什么会这样?
编辑2 对于任何人查看这个问题,请参阅他的答案最新编辑。导航控制器出于某种原因正在进行触摸,我需要弄清楚为什么会这样,可能是一个错误?
最终答案 :)
审查它看起来像位于按钮的下方是吃全球触摸的UINavigationController的项目后好。这绝对是奇怪的,因为它是作为子视图在你的按钮之下添加的。所以在UINavigationController中必定会出现某种时髦的帧/触摸。我试图设置navigationController.titleView.userInteractionEnabled =否,但无济于事。如果有人知道如何基本上使UINavigationController和UINavigationBar不吃东西(我说的是没有按钮存在的背景),那么请将它嵌入。当UINavigationController没有添加到视图时,UIButton触摸工作就好了。
原始回答
它可能在[自视图]或tempView一些其他UI元素坐在按钮的顶部和拦截抽头。你可能会想尝试要么注释掉期(县)一切和/或尝试这样的设置对他们的userInteractionEnabled属性:
[otherUIElement setUserInteractionEnabled: NO];
编辑: 此代码,以便您可以点击圆形矩形但不是标题文本。所以我怀疑它是某种子视图阻止按钮捕捉水龙头。
[logosButton addTarget:self action:@selector(logosButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[logosButton setFrame: CGRectMake(0, 0, 320.0, 50.0)];
[logosButton setTitle: @"HELLO" forState: UIControlStateNormal];
[logosButton.titleLabel setUserInteractionEnabled: YES];
编辑#2:
尝试使用这个子类的按钮,看看问题是否仍然存在:
// NavBtn.h
@interface NavBtn : UIButton {
}
-(id)initWithTitle:(NSString *)text;
@end
// NavBtn.m
#import "NavBtn.h"
@implementation NavBtn
- (id)initWithTitle:(NSString *)text {
if ((self = [super initWithFrame: CGRectMake(0, 0, 320, 50)])) {
[self setTitle: text forState: UIControlStateNormal];
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
[self setBackgroundImage:[UIImage imageNamed:@"logo_bar_alone.png"] forState: UIControlStateNormal];
[self setBackgroundImage:[UIImage imageNamed:@"logo_bar_alone.png"] forState: UIControlStateHighlighted];
}
return self;
}
// i guess you shouldn't need to mess with layoutSubviews
@end
将其加载到您的看法:
#import "NavBtn.h"
... in viewDidLoad, etc ...
NavBtn *btn = [[NavBtn alloc] initWithTitle: @"hey"];
[self.view addSubview: btn];
[btn release];
如果这不起作用,那么必须有某种第三方库做一些类似于你的UIButton类的重要类。
我想我刚刚偶然发现了一些东西,我将按钮更改为一个UIButtonTypeRoundedRect,并摆脱了图像(并使它变大),看起来我无法点击按钮的底部或顶部,按钮是圆形的。所以中间的矩形部分是我可以点击的唯一部分...为什么会这样? – Mark 2010-09-10 02:08:21
这真的很奇怪!我不确定,但作为一种解决方法,您可能想尝试以不同的方式创建按钮......比如继承UIButton,然后在子类按钮的layoutSubviews方法中设置背景图像。 – taber 2010-09-10 02:20:59
感谢编辑,但仍然没有运气,我完全没有想法... – Mark 2010-09-10 03:37:31