以编程方式将条形按钮项目图像设置为系统项目 - Swift

时间:2016-07-18 16:39:20

标签: ios swift xcode uibarbuttonitem uibarbuttonsystemitem

我有一个条形按钮项目设置为我的图像资源文件夹中的自定义图像。启动后,一旦用户按下按钮,我希望它更改为系统项 - 停止(X)按钮。我知道如何以编程方式更改条形按钮的图像,但如何将图像更改为代码中的某个系统项?

Swift 3,Xcode 8 beta 1.

编辑以下是我引用的系统项: Xcode system items

如何从我的代码中将我的按钮图像更改为其中一个系统项?

4 个答案:

答案 0 :(得分:2)

下载this项目以从iOS中提取艺术作品,并在打开菜单时更改按钮的图像。

当您运行项目并完成加载资源搜索关闭后,您可以看到所有X图像。

如果您在编译项目时遇到问题,请从有问题的属性和ivars中删除__weak

答案 1 :(得分:1)

对于使用 iOS 13 及更高版本的用户,您可以使用 UIImage(systemName:) 属性。您可以使用 Apple's SF Symbols app 搜索 systemItem 名称和相应的图像。以下是使用停止 X 按钮的示例:

barButtonItem.image = UIImage(systemName: "xmark")

答案 2 :(得分:0)

您需要做的是拥有两个按钮(您可以通过编程方式或在界面构建器中设置它们),一个具有图像,另一个具有停止行为。按下一个时,切换两者的可见性。

我认为最好的选择是以编程方式进行,所以这就是:

添加两个条形按钮项作为类成员:

private var itemOn: UIBarButtonItem!
private var itemOff: UIBarButtonItem!

然后在viewDidLoad中设置您想要的值(一个拥有一个图像,另一个拥有" X&#34的正常行为;)。然后将itemOn按钮添加到导航栏:

self.navigationItem.rightBarButtonItem = itemOn

请注意两者都应该采取相同的行动:

self.itemOn.target = self
self.itemOn.action = Selector("toggleVisibleButton:")
self.itemOff.target = self
self.itemOff.action = Selector("toggleVisibleButton:")

然后实现toggleVisibleButton函数:

func toggleVisibleButton(sender: UIBarButtonItem) {
    if self.navigationItem.rightBarButtonItem == itemOn {
        self.navigationItem.rightBarButtonItem = itemOff
        // Do something with the button that has the image
    } else {
        self.navigationItem.rightBarButtonItem = itemOn
        // Do something with the button that has the X
    }
}

更新Swift 3

设置这样的动作:

self.itemOn.action = #selector(self.toggleVisibleButton(sender:))

答案 3 :(得分:0)

navigationItem.rightBarButtonItem = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonItem.SystemItem.add, 
    target: self, 
    action: #selector(yourMethod)
)

根据https://developer.apple.com/documentation/uikit/uibarbuttonitem/systemitem

更改“添加”