带按钮的iPhone自定义导航栏不点击

带按钮的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类的重要类。

+0

我想我刚刚偶然发现了一些东西,我将按钮更改为一个UIButtonTypeRoundedRect,并摆脱了图像(并使它变大),看起来我无法点击按钮的底部或顶部,按钮是圆形的。所以中间的矩形部分是我可以点击的唯一部分...为什么会这样? – Mark 2010-09-10 02:08:21

+0

这真的很奇怪!我不确定,但作为一种解决方法,您可能想尝试以不同的方式创建按钮......比如继承UIButton,然后在子类按钮的layoutSubviews方法中设置背景图像。 – taber 2010-09-10 02:20:59

+0

感谢编辑,但仍然没有运气,我完全没有想法... – Mark 2010-09-10 03:37:31