NavigationBar changed in iOS10 - ios

I use the following code to setup left & right bar item,
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:#"nav-back"]
style:UIBarButtonItemStylePlain
target:self
action:#selector(leftItemTapped:)];
Now it stopped working in iOS 10, the items are not "clickable"
Any one know how to fix that?

Write this code in viewWillAppear, and it should work properly...
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:#"nav-back"]
style:UIBarButtonItemStylePlain
target:self
action:#selector(leftItemTapped:)];
}

Try this code:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:#"nav-back"]
style:UIBarButtonItemStylePlain
target:self
action:#selector(leftItemTapped:)];
}
- (IBAction)leftItemTapped:(id)sender{
NSLog(#"Navigation");
}
Output:
2016-09-15 15:30:00.972 test[34398:248335] Navigation

Related

How can I add a button to a navigation bar programmatically in xcode

I'm trying to add button to navigation bar i want to add the button without any action any help please?
UIBarButtonItem *yourButton = [[UIBarButtonItem alloc]
initWithTitle:#"Your Button"
style:UIBarButtonItemStyleBordered
target:self
action:#selector(methodName:)];
self.navigationItem.rightBarButtonItem = yourButton;
[yourButton release];
And then method
-(IBAction)methodName {
// your code here
}
You should add UIBarButtonItem to Nav bar instead of UIButton. T do that you can call this:
UIBarButtonItem *button = [[UIBarButtonItem alloc]
initWithTitle:#"Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
self.navigationItem.rightBarButtonItem = button;
UIBarButtonItem *customBtn=[[UIBarButtonItem alloc] initWithTitle:#"Custom" style:UIBarButtonItemStylePlain target:self action:#selector(customBtnPressed)];
[self.navigationItem setRightBarButtonItem:customBtn];
///// called event
-(IBAction)customBtnPressed:(id)sender
{
//Your code here
}
if UIButton is you really want, try this.
UIButton *btnSample = [[UIButton alloc] initWithFrame:btnFrame];
btnSample.backgroundColor = [UIColor blueColor];
UIBarButtonItem *barBtn_cart = [[UIBarButtonItem alloc] initWithCustomView:btnSample];
self.navigationItem.rightBarButtonItem = btnSample;

Not able to disable UIBarButtonItem in UIToolabar

I use code similar to following code make a custom toolbar. But it disabling functionality not working,
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStyleBordered target:self action:#selector(navigationCart:)];
barButtonItem.image = [self imageCartIconNormal];
barButtonItem.enabled = NO;
[self setToolbarItems:[[NSMutableArray arrayWithObjects:barButtonItem,barButtonItem1, barButtonItem2, nil] animated:YES];
Thank you in advance.
Tested and working :
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:nil
style:UIBarButtonItemStyleBordered target:self action:nil];
button.enabled = NO;
button.image = [UIImage imageNamed:#"icon"];
[self.toolbar setItems:#[button] animated:YES];
Make sure your imageCartIconNormal returns a UIImage.
Make sure your setToolbarItems calls the method above on an UIToolbar.
NB: There is no use in a mutable array here.

Grabbed the action of a UIBarButtonItem

I have code like this in my navigation bar:
UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithTitle:#"Next" style:UIBarButtonItemStylePlain target:self action:#selector(self)];
self.navigationItem.rightBarButtonItem = myButton;
What's the next step to grab when this is actually pressed?
You mad a mistake here by setting #selector(self).
You need to put here the actual function you need to fire:
UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithTitle:#"Next" style:UIBarButtonItemStylePlain target:self action:#selector(doSomeThing)];
And of course:
- (void) doSomeThing{
}
Do like this
UIBarButtonItem *Button=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:#selector(myAction:)];
self.navigationItem.leftBarButtonItem=Button;
- (void)myAction:(id)sender
{
//do ur actions
}

Right UIBarButton not shown

As simple as this code is :
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Inizializzazione barra di navigazione
[[self navigationController] setNavigationBarHidden:NO];
UINavigationItem* a = [self navigationItem];
[a setTitle:#"SOME TITLE"];
UIImage *background = [UIImage imageNamed:#"header.png"];
CGSize newSize;
newSize.height=100;
[self.navigationController.navigationBar setBackgroundImage:background
forBarMetrics:UIBarMetricsDefault];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc]
initWithTitle:#"Homefgh"
style:UIBarButtonItemStyleBordered
target:self action:#selector(home)];
self.navigationController.navigationItem.rightBarButtonItem = rightButton;
}
but the button is not shown (on the right).
I tried also to put the code in the viewDidLoad.
The viewWillAppear is inside a UIView pushed on top of the main UINavigationController.
The strange thing is that the background image is correctly shown.
You should be able to do something as simple as this to get it to show up:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc]
initWithTitle:#"Homefgh"
style:UIBarButtonItemStyleBordered
target:self action:#selector(home)];
self.navigationItem.rightBarButtonItem = rightButton;
Changeself.navigationController.navigationItem.rightBarButtonItem = rightButton; to self.navigationItem.rightBarButtonItem = rightButton;
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:#"Show" style:UIBarButtonItemStylePlain target:self action:#selector(refreshPropertyList:)];
self.navigationItem.rightBarButtonItem = anotherButton;
[anotherButton release];
}
Remember to put it in viewDidLoad instead of viewWillAppear.
Add this in your code
self.navigationItem.rightBarButtonItem = rightButton;
Instead of this code
self.navigationController.navigationItem.rightBarButtonItem = rightButton;
And it will be displayed.

Bar button not receiving touch

I have 2 bar buttons on the tool bar , one is not working and the other is working. Some times when we touch the tip of the first bar button it will work, I think this has to be a problem with flexible space between them.
I couldn't find any possible solution, any help will be appreciated!
I'm pasting the code below
editbutton is the first button and mybutton is the second button
-(void) rightButtonToolbar:(UIBarButtonItem*)menuButton{
UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,TOOLBAR_WIDTH ,44)];
NSMutableArray *barButtons = [[NSMutableArray alloc]init];
UIBarButtonItem *flexiSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[barButtons addObject:flexiSpace];
if (showEditButton)
{
NSLog(#"showeditbutton");
UIBarButtonItem *editButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:#selector(editOffer)];
[barButtons addObject:editButton];
[editButton release];
}
UIBarButtonItem *myButton2 = [[UIBarButtonItem alloc] initWithTitle:#"Kopiren" style:UIBarButtonSystemItemAction target:self action:#selector(copyOffer)];
[barButtons addObject:myButton2];
if (menuButton != nil) {
menuButtonShown=YES;
[barButtons addObject:menuButton];
}
else {
menuButtonShown=NO;
}
[toolbar setItems:barButtons animated:YES];
UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc]initWithCustomView:toolbar];
[self.navigationItem setRightBarButtonItem:rightBarButton animated:YES];
[barButtons release];
[flexiSpace release];
[rightBarButton release];
[toolbar release];
[myButton2 release];
}

Resources