我正在创建一个带有导航栏的ViewController。在这个栏中,我添加了一个UIBarButton,在这个UIBarButton上我将附加一个segue以转到另一个ViewController。
我希望这个按钮是一个图像,而不是简单的文本,所以我尝试去属性检查器部分和我的按钮的图像。结果很糟糕:
正如你在这一点上所想的,我想要一个正确的图像(像一个小一些的,我的在xcasts下,25px的高度和宽度)。
我通过使用以下工具,以编程方式获得了更好的结果:
hpSettingsBtn.image = UIImage(named: "settings")
但仍然不是我想要的。
知道吗?
我也尝试了使用自定义视图的功能,但是我的按钮不再是可点击的。
class HomePageViewController: UIViewController {
@IBOutlet weak var hpSettingsBtn: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
let button = createSettingsBtn()
hpSettingsBtn.customView = button
}
func createSettingsBtn() -> UIButton {
//create a new button
let button = UIButton(type: .custom)
//set image for button
button.setImage(UIImage(named: "settings"), for: .normal)
//set frame
button.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
button.widthAnchor.constraint(equalToConstant: 25).isActive = true
button.heightAnchor.constraint(equalToConstant: 25).isActive = true
return button
}
如果我使用这个代码,没有UIBarButton(通过在我的代码中创建它并自己将它附加到导航栏),那么我不知道是否可以使用segue(因为按钮不出现在故事板上)。
最佳答案
首先创建从第一viewController到第二viewController的segue,并将标识符设置到该segue。
eg : segue1 //segue identifier
然后创建自定义按钮
func makeSettingsBtn() {
//create a new button
let button = UIButton(type: .custom)
//set image for button
button.setImage(UIImage(named: "settings"), for: .normal)
//set frame
button.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
button.widthAnchor.constraint(equalToConstant: 25).isActive = true
button.heightAnchor.constraint(equalToConstant: 25).isActive = true
//Add target
button.addTarget(self, action: #selector(self.btnClick(_:)), for: .touchUpInside)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
按钮动作法
@objc func btnClick(_ sender:UIButton) {
self.performSegueWithIdentifier("segue1", sender: self)
}
关于ios - 在StoryBoard中为UIBarButton显示图像而不是文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53745731/