user2909432
user2909432

Reputation: 15

Putting 4 navigation bar buttons

i am new to iOS programming and i am wondering if it is possible to put 4 bar buttons into the UINavigationBar? I have tried a few methods that i have found on stack overflow but the buttons positions are not equal.

Here is a sample screenshot

enter image description here.

The method that i used to code my navigation bar is:

UIToolBar *tools = [[UIToolBar alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
UIImage *backImage = [UIImage imagedName:@"backIcon.png"];
UIImage *shareImage = [UIImage imagedName:@"shareIcon.png"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backImage forState:UIControlStateNormal];

// create the button and assign the image to the leftsidebutton
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backImage forState:UIControlStateNormal];
backButton.frame = CGRectMake(0, 0, backImage.size.width, backImage.size.height);

[backButton addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];

UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
[shareButton setImage:shareImage forState:UIControlStateNormal];
shareButton.frame = CGRectMake(0, 0, shareImage.size.width, shareImage.size.height);

//create space between the buttons
UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL];

UIBarButtonItem *customBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
UIBarButtonItem *shareBarButton = [[UIBarButtonItem alloc] initWithCustomView:shareButton];
self.navigationItem.hidesBackButton = YES;
NSArray *leftActionButtonItems = @[customBarButton, bi, shareBarButton];
[tools setItems:leftActionButtonItems animated:NO];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];

I did the same for rightBarButtonItem but it is not working so well.

Any help will be greatly appreciated! Thanks!

Upvotes: 0

Views: 472

Answers (4)

Vaisakh
Vaisakh

Reputation: 2927

Try the following code

self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:customBarButton, bi, shareBarButton, nil];

self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:BUTTON OBJECTS, nil];

Upvotes: 0

Dhaval Bhadania
Dhaval Bhadania

Reputation: 3089

Try this one :

Edit : it display Proper check it :

enter image description here

take .h file :

  UIToolbar *toolBar_T;
  UIBarButtonItem *item1,*item2,*item3,*item4;

take .m file :

toolBar_T=[[UIToolbar alloc] init];
toolBar_T.frame=CGRectMake(0,5,168, 44);
[self.view addSubview:toolBar_T];

UIButton *button0 = [UIButton buttonWithType:UIButtonTypeCustom];
[button0 setImage:[UIImage imageNamed:@"1.png"]  forState:UIControlStateNormal];
[button0 addTarget:self action:@selector(button0:) forControlEvents:UIControlEventTouchUpInside];
button0.frame = CGRectMake(0, 7, 35,29);
item1 = [[UIBarButtonItem alloc] initWithCustomView:button0];

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
[button1 setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal];
[button1 addTarget:self action:@selector(button1:) forControlEvents:UIControlEventTouchUpInside];
button1.frame = CGRectMake(0, 7, 35,29));
item2 = [[UIBarButtonItem alloc] initWithCustomView:button1];


UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
[button2 setImage:[UIImage imageNamed:@"3.png"] forState:UIControlStateNormal];
[button2 addTarget:self action:@selector(button2:) forControlEvents:UIControlEventTouchUpInside];
button2.frame = CGRectMake(0, 7, 35,29);
item3 = [[UIBarButtonItem alloc] initWithCustomView:button2];

 UIButton *button3 = [UIButton buttonWithType:UIButtonTypeCustom];
[button3 setImage:[UIImage imageNamed:@"4.png"] forState:UIControlStateNormal];

[button3 addTarget:self action:@selector(button3:) forControlEvents:UIControlEventTouchUpInside];
button3.frame = CGRectMake(0, 7, 35,29);
item4 = [[UIBarButtonItem alloc] initWithCustomView:butto3];

NSArray *buttons = [NSArray arrayWithObjects: item1, item2,item3, nil];

[toolBar_T setItems: buttons animated:NO];
toolBar_T.barStyle=-1;// For Clear backgroud
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolBar_T];

Hope it will help.

Happy coding...

Upvotes: 2

Konstantin
Konstantin

Reputation: 156

You can try smth like this...

-(void)setupToolbarButtons:(UIViewController *)navC
    {

        //create a toolbar in the right

        UIToolbar *tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 135, 44.01)];
        tools.delegate = self;
        tools.barTintColor = [UIColor clearColor];


        //create the array to hold the buttons, which then gets added to the toolbar
        NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:4];

        //create a standart 'play' button
        UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:nil];
        [buttons addObject:bi];
        [bi release];

        //create a standart 'stop' button
        bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:nil];
        [buttons addObject:bi];
        [bi release];

        //create a standart 'fast forward' button
        bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:nil];
        [buttons addObject:bi];
        [bi release];

        //create a standart 'pause' button
        bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:nil];
        [buttons addObject:bi];
        [bi release];

        //stick the buttons in the toolbar
        [tools setItems:buttons animated:NO];
        [buttons release];

        //and put the toolbar in the nav bar
        navC.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];
        [tools release];

    }

...also you can add a spacer if it's needed

bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[buttons addObject:bi];
[bi release];

and if something is wrong in vertical spacing, then add this

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}

Upvotes: 1

Mutawe
Mutawe

Reputation: 6524

UINavigationBar is Inherits from UIView, so you can simply add any object in.

Upvotes: 0

Related Questions