我用以下代码以编程方式实现了这个:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
button.setImage(UIImage(named: "fb.png"), forState: UIControlState.Normal)
button.addTarget(self, action: "fbButtonPressed", forControlEvents: UIControlEvents.TouchUpInside)
button.frame = CGRectMake(0, 0, 53, 31)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
func fbButtonPressed() {
println("Share to fb")
}
}
结果会是这样:
![enter image description here](https://istack.dev59.com/d7r7F.webp)
同样的方法,您也可以将按钮设置在左侧:
self.navigationItem.leftBarButtonItem = barButton
结果将会是:
![在此输入图片描述](https://istack.dev59.com/wSxoq.webp)
如果您想要与导航控制器使用默认返回按钮时相同的转场效果,那么可以使用以下代码来实现自定义返回按钮:
func backButtonPressed(sender:UIButton) {
navigationController?.popViewControllerAnimated(true)
}
对于 Swift 3.0:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton.init(type: .custom)
button.setImage(UIImage(named: "fb.png"), for: UIControlState.normal)
button.addTarget(self, action: #selector(ViewController.fbButtonPressed), for: UIControlEvents.touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
func fbButtonPressed() {
print("Share to fb")
}
}
对于 Swift 4.0:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "fb.png"), for: .normal)
button.addTarget(self, action: #selector(fbButtonPressed), for: .touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
@objc func fbButtonPressed() {
print("Share to fb")
}
}
let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
。实际上,在Swift 2.1中,我们有这个:let button: UIButton = UIButton(type: UIButtonType.Custom)
。 - Keith Hollidaybutton
,并将其translatesAutoresizingMaskIntoConstraints
设置为 false。例如:button.widthAnchor.constraint(equalToConstant: 53).isActive = true button.heightAnchor.constraint(equalToConstant: 51).isActive = true
- kbunarjo