2012-08-27 36 views
4

我想花幾個小時左右的按鈕正常工作,並模仿後退按鈕。UIBarButtonItem初始化與自定義視圖選擇器不能正常工作

我的代碼來創建按鈕:

UIBarButtonItem *backButton = [self customBarButton:@"back_button" imageHiglighted:@"settings_button_highlighted" x:20 y:0 widthDivider:2.6 heightDivider:2.6]; 

backButton.target = self; 
backButton.action = @selector(buttonPressed:); 

self.navigationItem.leftBarButtonItem = backButton; 

這裏所謂的創建自定義按鈕的方法:

- (UIBarButtonItem *)customBarButton:(NSString *)imageDefault imageHiglighted:(NSString *)imageHighlighted x:(float)x y:(float)y widthDivider:(float)widthDivider heightDivider:(float)heightDivider { 

UIImage *customImageDefault = [UIImage imageNamed:imageDefault]; 
UIImage *customImageHighlighted = [UIImage imageNamed:imageHighlighted]; 

CGRect frameCustomButton = CGRectMake(x, y, customImageDefault.size.width/widthDivider, customImageDefault.size.height/heightDivider); 

UIButton *customButton = [[UIButton alloc] initWithFrame:frameCustomButton]; 

[customButton setBackgroundImage:customImageDefault forState:UIControlStateNormal]; 
[customButton setBackgroundImage:customImageHighlighted forState:UIControlStateHighlighted]; 

UIBarButtonItem *barCustomButton =[[UIBarButtonItem alloc] initWithCustomView:customButton]; 

return barCustomButton; 

} 

和動作:

-(void)buttonPressed:(id) sender{ 

    NSLog(@"Entered"); 
    SearchViewController *ViewController = [[SearchViewController alloc] init]; 
    [self.navigationController pushViewController:ViewController animated:YES]; 

} 

所以我能使用簡單的UIButton而不是使用UIButtonBarItem,我真的不知道它是怎麼回事。

如果你能幫助我,我會非常感激。

謝謝。

+0

的解決方案是增加: [的CustomButton addTarget:自我行動:@selector(buttonPressed :) forControlEvents:UIControlEventTouchUpInside] ; 在我打電話的方法裏面。 –

回答

7

執行此添加selector定製button,因爲它是bar BUTTOM的view

[customButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

編輯注意:在UIBarButtonItemtargetaction適用於custom views

+0

謝謝你。這完全有效!非常感謝! –

1

試試這個

self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithCustomView:[GlobalMethods buttonWithImage:@"top-nav-back" heighlightImageName:nil buttonFrame:CGRectMake(102, 1, 50, 30) selectorName:@selector(btnBackClicked:) target:self]]; 


+ (UIButton*)buttonWithImage:(NSString*)normalImageName heighlightImageName:(NSString*)heighlightImageName buttonFrame:(CGRect)buttonFrame selectorName:(SEL)selectorName target:(id)target 
{ 
    UIButton *objButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [objButton setFrame:buttonFrame]; 
    [objButton addTarget:target action:selectorName forControlEvents:UIControlEventTouchUpInside]; 
    [objButton setImage:[GlobalMethods getImageFromResourceBundle:normalImageName] forState:UIControlStateNormal]; 
    if(heighlightImageName) 
     [objButton setImage:[GlobalMethods getImageFromResourceBundle:heighlightImageName] forState:UIControlStateDisabled]; 
    if(heighlightImageName) 
     [objButton setImage:[GlobalMethods getImageFromResourceBundle:heighlightImageName] forState:UIControlStateSelected]; 
    return objButton; 
} 
7
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:[UIImage imageNamed:@"goback.png"] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(//HERE ! i don't know put what thing !) forControlEvents:UIControlEventTouchUpInside]; 
[button setFrame:CGRectMake(0, 0, 32, 32)]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
0

試試這個..

[customButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
在customBarButton方法

.. 我的意思是說給予選擇您的按鈕而不是欄按鈕項..

檢查和回覆..

+0

當然有效。謝謝。 –

0

只需將此行寫入代碼中即可。

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

這爲我工作

UIButton * tmpButton = [self generateButtonwithImageName:@"Back.png" andSize:CGRectMake(0, 0, 55, 30)]; 
UIBarButtonItem * backButton = [[UIBarButtonItem alloc] initWithCustomView:tmpButton]; 
[tmpButton addTarget:self action:@selector(reload) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem=backButton; 


-(UIButton*)generateButtonwithImageName :(NSString*)imageName andSize:(CGRect)rect{ 
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame=rect; 
    [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    return button; 
} 
0

//爲我工作

if([version floatValue] < 7.0) 
{ 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navi-bar.png"] forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.opaque = YES; 

    closeButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 35, 30)]; 
    [closeButton setImage:[UIImage imageNamed:@"btn_end.png"] forState:UIControlStateNormal]; 
    [closeButton setImage:[UIImage imageNamed:@"btn_end_on.png"] forState:UIControlStateHighlighted]; 
    [closeButton addTarget:self action:@selector(actionClose) forControlEvents:UIControlEventTouchUpInside]; 


    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:closeButton]; 
} 
else{ 


    /*add button back to navigation*//*add buttom back to navigation*/ 
    UIBarButtonItem *itemBack = [[UIBarButtonItem alloc]initWithTitle:@"完了" style:UIBarButtonItemStylePlain target:self action:@selector(actionClose)]; 
    self.navigationItem.rightBarButtonItem = itemBack; 
} 
相關問題