ios 导航栏怎么添加左右按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 导航栏怎么添加左右按钮相关的知识,希望对你有一定的参考价值。

导航栏按钮的控件叫BarButtonItem。

关于其设置:

第一种:

UIImage *searchimage=[UIImage imageNamed:@"search.png"];
UIBarButtonItem *barbtn=[[UIBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStyleDone target:self action:@selector(searchprogram)];
barbtn.image=searchimage;
self.navigationItem.rightBarButtonItem=barbtn;
这种设置出来的外观不好控制

第二种:

UIButton*rightButton = [[UIButtonalloc]initWithFrame:CGRectMake(0,0,30,30)];
[rightButtonsetImage:[UIImageimageNamed:@"search.png"]forState:UIControlStateNormal];
[rightButtonaddTarget:selfaction:@selector(searchprogram)forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem*rightItem = [[UIBarButtonItemalloc]initWithCustomView:rightButton];
[rightButton release];
self.navigationItem.rightBarButtonItem= rightItem;
[rightItem release];
这种图片将填满button,大小可控

第三种:
UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(methodtocall:) ];

如何让navigationItem.rightBarButtonItem隐藏消失?
self.navigationItem.rightBarButtonItem=nil;

即可实现

参考资料:http://blog.csdn.net/zhuzhihai1988/article/details/7701998
参考技术A

    UIBarButtonItem *searchBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:nil];


    UIBarButtonItem *chooseBtn = [[UIBarButtonItem alloc] initWithTitle:@"选择" style:UIBarButtonItemStylePlain target:self action:nil];


    self.navigationItem.leftBarButtonItem = searchBtn;


    self.navigationItem.rightBarButtonItem = chooseBtn;


    先创建UIBarButtonItem,然后再添加到导航栏,导航栏有左右item,item可以自定义,也可以用系统样式;


    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];


    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

总之要转化为UIBarButtonItem。才能加到导航条里;

如果设置图片必须用最后面的自定义类型:

把btn的背景图或直接setImage都可以

参考技术B UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"share"] style:UIBarButtonItemStyleDone target:self action:@selector(myclickRightButton)]; //创建一个右边按钮

self.navigationItem.rightBarButtonItem = rightButton;
直接上代码,左边类似,导航栏这个东西建议自定义写,不建议使用系统自带,如果你的项目不是特别复杂也可以。
参考技术C 左右按钮一般用来实现回到上一页,和去下一页的功能。这一般由pop,push方法完成,这个方法在UINavigationContoller中,重名字可以知道,这是个视图控制器,简而言之是个容器。管理页面间的跳转。它上面有toolbar,和navigationBar。
先看下navigationbar的构成,navigationBar中包含了这几个重要组成部分:leftBarButtonItem, rightBarButtonItem, backBarButtonItem, title。
下面是代码
UIButton* leftBtn= [UIButton buttonWithType:UIButtonTypeCustom];

[leftBtn setImage:[UIImage imageNamed:@"设置按钮"] forState:UIControlStateNormal];

leftBtn.frame = CGRectMake(0, 0, 30, 30);

UIBarButtonItem* leftBtnItem = [[UIBarButtonItem alloc]initWithCustomView:pCenter];

[leftBtn addTarget:self action:@selector(setviewinfo) forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setleftBarButtonItem:leftBtnItem];、

我做的是右边按钮,想做左边修改[self.navigationItem setleftBarButtonItem:leftBtnItem]为[self.navigationItem setRightBarButtonItem:leftBtnItem]
再点击事件里可以做一些push,pop等跳转页面操作。
button在最上面,item在button下,navigationbar在item下,是有层次关系的。

如何在 iOS 的导航栏中添加标准信息按钮?

【中文标题】如何在 iOS 的导航栏中添加标准信息按钮?【英文标题】:How to add a standard info button to a navigation bar in iOS? 【发布时间】:2016-10-10 09:36:36 【问题描述】:

我想在导航栏中添加一个带有系统信息图标的右栏按钮。但我看到UIBarButtonSystemItem 没有提供这种类型的按钮。另一方面,所以我尝试使用UIButtonType.infoLight 类型的UIButton,但我不能将其分配给navigationItem.rightBarButtonItems

有什么办法吗?

【问题讨论】:

【参考方案1】:

这可以使用.infoLight类型的UIButton对象来实现

let infoButton = UIButton(type: .infoLight)
infoButton.addTarget(self, action: #selector(infoButtonTapped), forControlEvents: .TouchUpInside)
let barButton = UIBarButtonItem(customView: infoButton)
self.navigationItem.rightBarButtonItem = barButton

或者:

通过将infoImage 添加到您的Asset catalog 并使用以下代码创建barButtonItem

let infoButton = UIBarButtonItem(image: UIImage(named: "infoImage"), style: .Plain, target: self, action: #selector(ViewController.infoButtonTapped))
self.navigationItem.rightBarButtonItem = infoButton 

【讨论】:

这很不方便。 那就更不方便了。已经有一个预先制作的信息按钮。既然 OP 要求的是默认的,为什么要让加载图片等变得复杂呢? @LinusG。您不能将 UIBarButton 与 type 一起使用。 InfoLight 没有在 UIBarButtonTypes 中提供,但可以与 UIButton 类型一起使用。如果您有解决方案,请提供解决方案,而不是评论 Approcaches。【参考方案2】:

我发现了一种使用 Interface Builder 将信息图标添加到导航栏的更简单方法。

    不要将条形按钮项添加到导航栏 向 UIView 添加按钮 将按钮类型更改为信息灯 将按钮拖放到导航栏的右上角。这就是全部。 Bar Button Item 将自动出现,添加的 info Button 将位于 Bar Button Item 下方 (然后,像往常一样对 Button 进行操作)

【讨论】:

将 UIButton 拖到导航栏上! (或工具栏,在我的情况下)。您不必先将其放在视图上。效果很好。【参考方案3】:

您可以使用自定义视图初始化UIBarButtonItem

let button = UIButton(type: .infoLight)
let barButton = UIBarButtonItem(customView: button)

【讨论】:

再一步,设置按钮的初始框架。 button.frame = CGRect(x: 0, y: 0, width: 34, height: 30)【参考方案4】:

Swift 5.0

override func viewDidLoad() 
    super.viewDidLoad()

    let infoButton = UIButton(type: .infoLight)
    infoButton.addTarget(self, action: #selector(infoButtonTapped), for: .touchUpInside)
    navigationItem.rightBarButtonItem = UIBarButtonItem(customView: infoButton)


@objc func infoButtonTapped() 

【讨论】:

【参考方案5】:
UIButton *doneBtn = [[UIButton alloc] initWithFrame...];
[doneBtn setTitle:@"Submit" forState:UIControlStateNormal];
doneBtn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
[doneBtn addTarget:self action:@selector(doSubmit:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:doneBtn];
self.navigationItem.rightBarButtonItem = rightButton;

【讨论】:

【参考方案6】:

将 infoButton 图像添加到您的资产中,并通过提供名称设置为 barButton。

UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"infoImage.png"] style:UIBarButtonItemStyleDone target:self action:@selector(barButtonAction)];

    self.navigationItem.rightBarButtonItem = item;

在斯威夫特中

  let item = UIBarButtonItem(image: UIImage(named: "infoImage.png"), style: .Plain, target: self, action: #selector(barButtonAction))

        self.navigationItem.rightBarButtonItem = item

【讨论】:

谢谢,但实际上我不想提供图像而是使用标准图标

以上是关于ios 导航栏怎么添加左右按钮的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器类的类别中添加左右栏按钮项

Flutter——两种监听导航栏返回按钮的方法

从导航栏左右栏按钮项减少左侧空间和右侧空间

iOS 导航栏-返回按钮-自定义

如何减少iOS导航栏自定义视图的左右间隙

无法在故事板iOS8的导航栏中添加右栏按钮