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

owl*_*ipe 6 xcode uibarbuttonitem ios uibarbuttonsystemitem swift

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

Swift 3,Xcode 8 测试版 1。

编辑这是我引用的系统项目: Xcode 系统项

如何将我的按钮图像从我的代码更改为这些系统项之一?

Vla*_*Nul 0

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

我相信最好的选择是以编程方式完成,所以方法如下:

添加两个栏按钮项目作为类成员:

private var itemOn: UIBarButtonItem!
private var itemOff: UIBarButtonItem!
Run Code Online (Sandbox Code Playgroud)

然后根据viewDidLoad需要设置值(一个具有图像,另一个具有“X”的正常行为)。然后将itemOn按钮添加到导航栏:

self.navigationItem.rightBarButtonItem = itemOn
Run Code Online (Sandbox Code Playgroud)

请注意,两者应该具有相同的操作:

self.itemOn.target = self
self.itemOn.action = Selector("toggleVisibleButton:")
self.itemOff.target = self
self.itemOff.action = Selector("toggleVisibleButton:")
Run Code Online (Sandbox Code Playgroud)

然后实现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
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift 3 更新

像这样设置动作:

self.itemOn.action = #selector(self.toggleVisibleButton(sender:))
Run Code Online (Sandbox Code Playgroud)