如何将setEditing状态转换为Edit / Done按钮的切换模式

时间:2018-01-16 01:53:22

标签: ios swift uiview uiviewcontroller setediting

当选择编辑模式时,我使用编辑/完成按钮向上移动MKMapView,目的是在屏幕底部的imageView中显示消息。我的理解是改变这个按钮的功能我必须使用override func setEditing()。

虽然我可以让它从编辑模式更改为完成模式一次,但相应的标题更改,我永远无法让它更改回编辑模式。结果就是当你按下" Done"它一遍又一遍地完成了#34;完成"并继续移动MKMapView。

我希望这个作为一个切换操作,但由于某种原因,这个过程让我失望:

is_continuous_feed: "false"

我尝试实施" isEditing"和#34; isEnabled"在我的if / else语句中,到目前为止还没有工作。我错过了什么?

编辑:

嗯,我想出了这种方法,虽然有效,但看起来很笨重。

is_continuous_feed: false

我不得不使用64作为值来让mapView返回到超级视图的底部,不完全确定原因。

Center view controller is the one in question

1 个答案:

答案 0 :(得分:1)

首先,不要为“编辑/完成”按钮创建自己的按钮。 UIViewController使用editButtonItem属性为您提供此功能。

我不知道如何在故事板中使用它,但在代码中,您在viewDidLoad方法中添加以下行:

navigationItem.rightBarButtonItem = editButtonItem

此按钮已设置为调用setEditing(_:animated:)方法并在编辑和完成之间切换按钮标题。

所以你需要做的就是覆盖setEditing(_:animated:)方法。

您的实施已接近尾声。只在开始时调用super.setEditing一次,不要尝试设置按钮的标题。

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

    if editing {
        print("Are we editing NOW: \(isEditing)")
        mapView.frame.origin.y = -24
    } else {
        print("Are we editing: \(isEditing)")
        mapView.frame.origin.y = 64
    }
}