Rah*_*ane 117 uibarbuttonitem navigationbar ios swift
我一直在寻找这个解决方案一段时间但没有得到任何解决方案.例如一个解决方案是
self.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: nil), animated: true)
Run Code Online (Sandbox Code Playgroud)
此代码将添加一个带有"停止"图像的按钮.就像这样,还有其他解决方案"搜索",刷新"等等.但是,如果我想以编程方式添加按钮,我想要的图像呢?
EI *_*2.0 318
不设置按钮框的自定义按钮图像:
您可以使用init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)指定的图像和其他属性初始化新项目.
let button1 = UIBarButtonItem(image: UIImage(named: "imagename"), style: .plain, target: self, action: Selector("action")) // action:#selector(Class.MethodName) for swift 3
self.navigationItem.rightBarButtonItem = button1
Run Code Online (Sandbox Code Playgroud)
检查此Apple Doc.参考
对于 Swift 3.0
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "imagename"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn1.addTarget(self, action: #selector(Class.Methodname), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)
let btn2 = UIButton(type: .custom)
btn2.setImage(UIImage(named: "imagename"), for: .normal)
btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn2.addTarget(self, action: #selector(Class.MethodName), for: .touchUpInside)
let item2 = UIBarButtonItem(customView: btn2)
self.navigationItem.setRightBarButtonItems([item1,item2], animated: true)
Run Code Online (Sandbox Code Playgroud)
为了Swift 2.0更老
let btnName = UIButton()
btnName.setImage(UIImage(named: "imagename"), forState: .Normal)
btnName.frame = CGRectMake(0, 0, 30, 30)
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside)
//.... Set Right/Left Bar Button item
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = btnName
self.navigationItem.rightBarButtonItem = rightBarButton
Run Code Online (Sandbox Code Playgroud)
或者只是使用init(customView :)之类的
Run Code Online (Sandbox Code Playgroud)let rightBarButton = UIBarButtonItem(customView: btnName) self.navigationItem.rightBarButtonItem = rightBarButton
对于System UIBarButtonItem
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: Selector("btnOpenCamera"))
self.navigationItem.rightBarButtonItem = camera
Run Code Online (Sandbox Code Playgroud)
设置超过1个项目使用rightBarButtonItems或左侧leftBarButtonItems
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
let item1 = UIBarButtonItem()
item1.customView = btn1
let btn2 = UIButton()
btn2.setImage(UIImage(named: "img2"), forState: .Normal)
btn2.frame = CGRectMake(0, 0, 30, 30)
btn2.addTarget(self, action: Selector("action2:"), forControlEvents: .TouchUpInside)
let item2 = UIBarButtonItem()
item2.customView = btn2
self.navigationItem.rightBarButtonItems = [item1,item2]
Run Code Online (Sandbox Code Playgroud)
使用setLeftBarButtonItem或setRightBarButtonItem
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: btn1), animated: true);
Run Code Online (Sandbox Code Playgroud)
对于swift> = 2.2,动作应该是
#selector(Class.MethodName)...例如btnName.addTarget(self, action: #selector(Class.MethodName), forControlEvents: .TouchUpInside)
Jay*_*ayu 25
使用Swift 4或更容易Swift 4.2
在您的ViewDidLoad方法中,定义您的按钮并将其添加到导航栏.
override func viewDidLoad() {
super.viewDidLoad()
let logoutBarButtonItem = UIBarButtonItem(title: "Logout", style: .done, target: self, action: #selector(logoutUser))
self.navigationItem.rightBarButtonItem = logoutBarButtonItem
}
Run Code Online (Sandbox Code Playgroud)
那么你需要定义你在action参数中提到的函数,如下所示
@objc func logoutUser(){
print("clicked")
}
Run Code Online (Sandbox Code Playgroud)
您需要添加@objc前缀,因为它仍在使用遗留内容(目标C).
Leo*_*Leo 17
只需UIBarButtonItem使用customView进行设置
例如:
var leftNavBarButton = UIBarButtonItem(customView:yourButton)
self.navigationItem.leftBarButtonItem = leftNavBarButton
Run Code Online (Sandbox Code Playgroud)
或使用setFunction:
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: yourButton), animated: true);
Run Code Online (Sandbox Code Playgroud)
tec*_*242 11
我只是偶然发现了这个问题,这里是Swift 3和iOS 10的更新:
let testUIBarButtonItem = UIBarButtonItem(image: UIImage(named: "test.png"), style: .plain, target: self, action: nil)
self.navigationItem.rightBarButtonItem = testUIBarButtonItem
Run Code Online (Sandbox Code Playgroud)
它肯定比使用所有属性创建UIButton然后随后将customView添加到UIBarButtonItem快得多.
如果您想将图像的颜色从默认的蓝色更改为例如白色,您可以随时更改色调颜色:
test.tintColor = UIColor.white()
Run Code Online (Sandbox Code Playgroud)
PS你应该明显改变你的应用程序的选择器等:)
小智 7
适用于 Swift 5+
let searchBarButtonItem = UIBarButtonItem(image: UIImage(named: "searchIcon"), style: .plain, target: self, action: #selector(onSearchButtonClicked))
self.navigationItem.rightBarButtonItem = searchBarButtonItem
@objc func onSearchButtonClicked(_ sender: Any){
print("SearchButtonClicked")
}
Run Code Online (Sandbox Code Playgroud)
在快捷键3中执行操作:
let testUIBarButtonItem = UIBarButtonItem(image: UIImage(named: "test.png"), style: .plain, target: self, action: #selector(ViewController.clickButton))
self.navigationItem.rightBarButtonItem = testUIBarButtonItem
func clickButton(){
print("button click")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157099 次 |
| 最近记录: |