如何在运行时“干净地”更改UIBarButtonItem文本(编辑 - >完成 - >编辑)?

时间:2016-10-20 01:26:16

标签: ios swift uibarbuttonitem

我正在尝试在运行时“干净地”更改UIBarButtonItem文本,以便可以切换编辑/完成模式。但是,每次在运行时更改title属性时,动画看起来都很笨拙。我希望模拟“联系人”应用程序中“编辑/完成”按钮的外观和功能(“编辑”只会淡出,“完成”会显示在其位置)。

@IBAction func editDoneButtonPressed(sender: UIBarButtonItem) {

    if(sender.title == "Edit"){
        sender.title = "Done"
    }else{
        sender.title = "Edit"
    }

}

初始设置:标识符设置为“自定义”,标题设置为“编辑”

更喜欢简单的编程解决方案,但动画的外观确实是最重要的。我考虑切换UIBarButtonItem标识符,而不是它的text属性,但是,我不确定在运行时切换标识符的优雅方法。

BTW:我正在使用Swift来构建应用程序。

链接到...

联系人应用的截屏视频编辑/完成切换动画: https://youtu.be/5mT_vzpNhIw

我的编辑/完成切换动画的截屏视频: https://youtu.be/mEweotJNVNE

谢谢。

1 个答案:

答案 0 :(得分:2)

获得编辑/完成按钮有一种更好的方式,一种标准方式。

UIViewController提供了一个标准的编辑/完成按钮,该按钮已挂在视图控制器的editing属性中。

常见用法如下:

在视图控制器的viewDidLoad方法内,使用标准按钮:

self.navigationItem.rightBarButtonItem = editButtonItem

editButtonItem放在您真正需要的地方。

然后,不要设置自己的操作,只需覆盖setEditing(_:animated:)方法:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if (editing) {
        // user just tapped the Edit button (it now says Done)
    } else {
        // user just tapped the Done button (it now says Edit)
    }
}