UIBarButtonItem init с пользовательским селектором представления не работает должным образом
Я часами пытаюсь заставить левую кнопку работать правильно и имитировать кнопку Назад.
Мой код для создания кнопки:
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, и я действительно не знаю, что с ним происходит.
Если бы вы могли мне помочь, я был бы вам очень признателен.
Спасибо.
7 ответов:
Сделайте это добавьте
selector
к обычаюbutton
, как этоview
изbar
buttom:[customButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
Править : Примечание :
target
иaction
изUIBarButtonItem
применяются кcustom views
.
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];
ПОПРОБУЙТЕ ЭТО
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; }
Попробуйте это..
[customButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
В вашем методе customBarButton.. Я хочу сказать, дайте селектор вашей кнопке вместо элемента кнопки бара..
Проверьте и ответьте..
Просто поместите эту строку в свой код..
[backButton addTarget:self action:@selector(backBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
Это сработало для меня
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; }
/ / работает на меня
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; }