ios 如何在iphone的导航栏中添加右侧栏按钮

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5832098/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 19:45:12  来源:igfitidea点击:

How to add a right bar button to a navigation bar in iphone

iosobjective-ciphonenavigationbar

提问by Rani

I want to add a right bar button item to the navigation bar, so that on click, it performs certain a function.

我想在导航栏中添加一个右栏按钮项,以便在单击时执行某些功能。

I have created the following code to add the right bar button item, but after it is done, the bar button item is not getting displayed in navigation bar:

我创建了以下代码来添加右侧栏按钮项,但完成后,栏按钮项未显示在导航栏中:

-(void)viewDidload{
    self.navigationItem.rightBarButtonItem = 
    [[[UIBarButtonItem alloc] 
           initWithBarButtonSystemItem:UIBarButtonSystemItemAdd                                                                                                     
                                target:self
                                action:@selector(Add:)] autorelease];    
}

-(IBAction)Add:(id)sender
{
    TAddNewJourney *j=[[TAddNewJourney alloc]init];
    [app.navigationController pushViewController:j animated:YES];
    [j release];
}

回答by János

Let assume, you have a UIViewController, like this:

假设您有一个 UIViewController,如下所示:

UIViewController *vc = [UIViewController new];

And you added it to navigation controller:

你把它添加到导航控制器:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];

In this way rightBarButtonItem will NOT getting displayed:

这样就不会显示rightBarButtonItem :

nc.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"xyz" style:UIBarButtonItemStyleDone target:self action:@selector(xyz)];

BUT this way IT WILL appear:

但是这样它会出现

vc.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"xyz" style:UIBarButtonItemStyleDone target:self action:@selector(xyz)];

Use your own viewcontroller instead of the navigationcontroller to refer navigationItem.

使用您自己的视图控制器而不是导航控制器来引用导航项。

回答by visakh7

-(void)viewDidLoad
{ 
    [super viewDidLoad];
    app.navigationController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(Add:)] autorelease];
}

-(IBAction)Add:(id)sender
{
    TAddNewJourney *j=[[TAddNewJourney alloc]init];
    [app.navigationController pushViewController:j animated:YES];
    [j release];
}

Try the other answers. I posted this answer so that it will work if your viewcontroller does not have a navigation controller which i think is the problem.

尝试其他答案。我发布了这个答案,以便在您的视图控制器没有我认为是问题的导航控制器时它会起作用。

回答by Aman Aggarwal

Add this code in viewdidload

在 viewdidload 中添加此代码

UIBarButtonItem *chkmanuaaly = [[UIBarButtonItem alloc]initWithTitle:@"Calculate" style:UIBarButtonItemStylePlain target:self action:@selector(nextview:)];

UIBarButtonItem *chkmanuaaly = [[UIBarButtonItem alloc]initWithTitle:@"Calculate" style:UIBarButtonItemStylePlain target:self action:@selector(nextview:)];

self.navigationItem.rightBarButtonItem = chkmanuaaly;

self.navigationItem.rightBarButtonItem = chkmanuaaly;

回答by eGanges

Most of the answers here address setting the UINavigationBar's rightBarButtonItem from within the new VC after it is shown. My need, which was actually answered by János, is to set the UINavigationItem items from the CALLING UIViewController. Hence, the following code (Thanks, János).

此处的大多数答案都解决了在显示后从新 VC 中设置 UINavigationBar 的 rightBarButtonItem 的问题。我的需要(实际上由 János 回答)是从 CALLING UIViewController 设置 UINavigationItem 项。因此,下面的代码(谢谢,János)。

// from within self (aka the calling controller):

// 从自身内部(又名调用控制器):

    UIViewController *c = [[[UIViewController alloc] init...] autorelease];
    c.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissModalViewControllerAnimated:)] autorelease];
    c.navigationItem.title = @"Title Goes Here";
    UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:c] autorelease];
    nav.navigationBarHidden = FALSE;
    [self presentModalViewController:nav animated:YES];

Now, granted, this may seem redundant to János' answer, but I need more rep points in order o mark his response up. ;-)

现在,当然,这对于 János 的回答来说似乎是多余的,但我需要更多的代表点数来标记他的回答。;-)

回答by Yuri Chukhlib

I guess it will be more complete response and it should help in any situation:

我想这将是更完整的响应,它应该在任何情况下都有帮助:

-(void)viewDidLoad{

    //Set Navigation Bar
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

    //Set title if needed
    UINavigationItem * navTitle = [[UINavigationItem alloc] init];
    navTitle.title = @"Title";

    //Here you create info button and customize it
    UIButton * tempButton = [UIButton buttonWithType:UIButtonTypeInfoLight];

    //Add selector to info button
    [tempButton addTarget:self action:@selector(infoButtonClicked) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem * infoButton = [[UIBarButtonItem alloc] initWithCustomView:tempButton];

    //In this case your button will be on the right side
    navTitle.rightBarButtonItem = infoButton;

    //Add NavigationBar on main view
    navBar.items = @[navTitle];
    [self.view addSubview:navBar];

}

回答by Gypsa

UIBarButtonItem *add=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addUser)];
    self.navigationItem.rightBarButtonItem=add;
    [add release];

回答by Otroberts

Use the following code:

使用以下代码:

    UIBarButtonItem *add=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addUser)];
    self.navigationItem.rightBarButtonItem=add;
    [add release];

Hope this helps you out.

希望这可以帮助你。

Enjoy!

享受!

回答by Ali Amin

Swift:

迅速:

let rightButton = UIBarButtonItem(image: UIImage(named: "imageName"),
                                  style: .plain,
                                 target: self,
                                 action: #selector(buttonTapped))
navigationItem.setRightBarButton(rightButton, animated: false)

@objc func buttonTapped(sender: UIBarButtonItem!) {
    // Implement action 
}

回答by Piersoft

UIButton *dButton=[UIButton buttonWithType:0];
dButton.frame=CGRectMake(50,50,50,50);

[dButton addTarget:self  action:@selector(clickdButton:)
  forControlEvents:UIControlEventTouchUpInside];
[dButton setImage:[UIImage imageNamed:@"iconnavbar.png"]
         forState:UIControlStateNormal];    
dButton.adjustsImageWhenHighlighted=NO;
dButton.adjustsImageWhenDisabled=NO;
dButton.tag=0;
dButton.backgroundColor=[UIColor clearColor];

UIBarButtonItem *RightButton=[[[UIBarButtonItem alloc] initWithCustomView:dButton]autorelease];
self.navigationItem.rightBarButtonItem=RightButton;

and then:

进而:

-(IBAction)clickdButton:(id)sender{
    classexample *tempController=[[classexample alloc] init];
    [self.navigationController pushViewController:tempController animated:YES];
    [tempController autorelease];
}