2010-09-10 138 views
0

我有一個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 對於任何人查看這個問題,請參閱他的答案最新編輯。導航控制器出於某種原因正在進行觸摸,我需要弄清楚爲什麼會這樣,可能是一個錯誤?

回答

1

最終答案 :)

審查它看起來像位於按鈕的下方是吃全球觸摸的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