-->

How to add several UIBarButtonItems to a Navigatio

2019-02-12 17:40发布

问题:

I want to draw multiple buttons on a UINavigationBar. These will be either on right side or left side.

回答1:

I did one example in which I had two buttons ( i.e. Edit and +) on Right side of NaviagationBar.

1) You have to create one NSMutableArray(i.e. "buttons" in example) and add UIBarButtonItem (i.e. bi1 and bi2 in example) to the NSMutableArray (i.e. buttons).

2) Add NSMutableArray(i.e. buttons in example) to toolbar(i.e. UIToolbar *tools in example).

3) Add toolbar to NavigationBar.

 NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:2];
 UIToolbar *tools = [[UIToolbar alloc]
                    initWithFrame:CGRectMake(0.0f, 0.0f, 90.0f, 55.01f)];
// Add bar button1.

UIBarButtonItem *bi1 = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(Edit:)];
bi1.style = UIBarButtonItemStyleBordered;
bi1.width = 45;
[buttons addObject:bi1];
//[bi1 release]; Do not release if ARC enabled.

// Add bar button2.
UIBarButtonItem *bi2 = [[UIBarButtonItem alloc] initWithTitle:@"+" style:UIBarButtonItemStylePlain target:self action:@selector(Add:)];
bi2.style = UIBarButtonItemStyleBordered;
[buttons addObject:bi2];
//[bi2 release]; Do not release if ARC enabled.

// Add buttons to toolbar and toolbar to nav bar.
[tools setItems:buttons animated:NO];
//[buttons release];  Do not release if ARC enabled.

 // Add toolbar to nav bar.
UIBarButtonItem *twoButtons = [[UIBarButtonItem alloc] initWithCustomView:tools];
[tools release];
self.navigationItem.rightBarButtonItem = twoButtons;
//[twoButtons release]; Do not release if ARC enabled.


回答2:

do it in your xib file and make properties or just variables in the header

@property (nonatomic, retain) IBOutlet UIBarButtonItem *itemOne;

and then connect it in the xib. Enjoy



回答3:

Create a new UIToolbar in code and add your buttons to the toolbar. Then set self.navigationItem.rightBarButton to your newly created toolbar (note the example is without ARC so you may need to remove calls to release):

    // create a toolbar to have two buttons in the right
UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 100, 44.01)];

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

// create a standard "add" button
UIBarButtonItem* bi = [[UIBarButtonItem alloc]
                       initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addRow)];
bi.style = UIBarButtonItemStyleBordered;
[buttons addObject:bi];
[bi release];

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

[buttons addObject:self.editButtonItem];

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

[buttons release];

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


回答4:

Here I'm giving you sample code that I used for Button as well as label. you can create button instead of label and image what i created. I hope it will help you

- (void) setLabelForPotraite {

    bar = [self.navigationController navigationBar];    
    [bar setBackgroundColor:[UIColor clearColor]];
    barImg=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navImg.png"]];
    [bar addSubview:barImg];


    tick_img_lbl=[[UIImageView alloc]initWithFrame:CGRectMake(86, 6,34, 33)];
    tick_img_lbl.image=[UIImage imageNamed:@"tick-1.png"];
    [bar addSubview:tick_img_lbl];
    [tick_img_lbl release];

    tickCount_lbl=[[UILabel alloc] initWithFrame:CGRectMake(126, 2, 50, 40)];
    tickCount_lbl.text=@"";
    tickCount_lbl.font=[UIFont fontWithName:@"Arial" size:24.0];
    [tickCount_lbl setTextAlignment:UITextAlignmentCenter];
    tickCount_lbl.font = [UIFont boldSystemFontOfSize:24.0];
    tickCount_lbl.textColor=[UIColor whiteColor];
    tickCount_lbl.backgroundColor=[UIColor clearColor];
    [bar addSubview:tickCount_lbl];
    [tickCount_lbl release];

    cross_img_lbl=[[UIImageView alloc]initWithFrame:CGRectMake(181, 6, 34, 33)];
    cross_img_lbl.image=[UIImage imageNamed:@"x_green.png"];

    [bar addSubview:cross_img_lbl];
    [cross_img_lbl release];

    crossCount_lbl=[[UILabel alloc] initWithFrame:CGRectMake(221, 2, 50, 40)];
    crossCount_lbl.text=@"";
    crossCount_lbl.font=[UIFont fontWithName:@"Arial" size:24.0];
    crossCount_lbl.font = [UIFont boldSystemFontOfSize:24.0];
    crossCount_lbl.textColor=[UIColor whiteColor];
    [crossCount_lbl setTextAlignment:UITextAlignmentCenter];
    crossCount_lbl.backgroundColor=[UIColor clearColor];
    [bar addSubview:crossCount_lbl];
    [crossCount_lbl release];

    master_img_lbl=[[UIImageView alloc]initWithFrame:CGRectMake(269, 6, 34, 33)];
    master_img_lbl.image=[UIImage imageNamed:@"thumb.png"];
    [bar addSubview:master_img_lbl];
    [master_img_lbl release];

}

If any problem in understanding or else then plz inform me.