2014-02-06 181 views
0
backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

[backButton addTarget:self action:@selector(gotoAmphorasViewController) forControlEvents:UIControlEventTouchUpInside]; 

[backButton setFrame:CGRectMake(0.0f,0.0f, 44,44)]; 

我面臨的問題是,儘管按鈕尺寸爲44*44,無論我在哪裏點擊它的任何位置,按鈕操作都會被觸發。導航欄自定義按鈕

+0

爲什麼那麼糟糕?您總是可以通過按鈕獲得額外的迴旋餘地,以便輕鬆按下。 – Mika

+0

我不是說這很糟糕,我對此沒有任何想法,所以我認爲這是一個錯誤。 謝謝@ mMikael – Abhishek

回答

1

請嘗試婁代碼:它的正常工作

- (void)viewDidLoad { 
    [super viewDidLoad]; 
UIImage *buttonImage = [UIImage imageNamed:@"back.png"]; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

    [button setImage:buttonImage forState:UIControlStateNormal]; 


    button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 

    [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    self.navigationItem.leftBarButtonItem = customBarItem; 
    [customBarItem release]; 



} 

-(void)back { 

[self.navigationController popViewControllerAnimated:YES]; 
} 
1

它不是一個錯誤。這是一種默認行爲。在iPhone中,對於導航欄按鈕,觸摸檢測稍微多了一些,而不是它的框架。只需看看任何其他應用程序。如果我們點擊更近但在框外,按鈕就會被觸發。

1

這是預期的行爲,如果你真的想限制觸摸的區域,你可以用一個UIView裏面的按鈕:

UIView *buttonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)]; 
[buttonContainer addSubview:button]; 
_barButton = [[UIBarButtonItem alloc] initWithCustomView:buttonContainer]; 
+0

謝謝男人:) 我喜歡你的方法 – Abhishek