在 StoryBoard 中显示图像而不是 UIBarButton 的文本

Display image instead of text for UIBarButton within StoryBoard

我正在创建一个带有导航栏的 ViewController。在这个栏中,我添加了一个 UIBarButton,我将在其上附加一个 segue 以转到另一个 ViewController。 我希望这个按钮是一个图像而不是简单的文本,所以我尝试继续 Attributes Inspector 部分并将图像添加到我的按钮。结果很糟糕:

此时你可能会想,我想要一个正确的图像(比如小一点,我的在 xcassets 下,25 像素的高度和宽度)。

通过使用这个,我设法以编程方式获得了更好的东西:

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 的转场,并为该转场设置一个标识符。

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)
}