0

I am using a Edit/Done button to move an MKMapView upwards when Edit mode is selected, with the intention of display a message in an imageView at the bottom of the screen. 我的理解是改变这个按钮的功能我必须使用override func setEditing()。

虽然我可以让它从编辑模式更改为完成模式一次,但随着相应的标题更改,我永远无法将其更改回编辑模式。结果是当您一遍又一遍地按“完成”时,它仍然是“完成”并继续向上移动 MKMapView。

我希望它作为切换操作,但由于某种原因,该过程使我无法理解:

    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
    editButtonItem.title = "Done"
} else {
    print("Are we editing: \(isEditing)")
    mapView.frame.origin.y = 64
    editButtonItem.title = "Edit"
}
super.setEditing(editing, animated: true)

我在 if/else 语句中尝试实现的“isEditing”和“isEnabled”到目前为止还没有奏效。我错过了什么?

编辑:

好吧,我想出了这种方法,虽然可行,但看起来很笨拙。

    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
        editButtonItem.title = "Done"
    } else {
        print("Are we editing: \(isEditing)")
        mapView.frame.origin.y = 64
        editButtonItem.title = "Edit"
    }
    super.setEditing(editing, animated: true)
}

我必须使用 64 作为值来让 mapView 返回到超级视图的底部,但不完全确定为什么。

中心视图控制器是有问题的

4

1 回答 1

1

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

我不知道如何在情节提要中使用它,但是在代码中,您在viewDidLoad方法中添加了以下行:

navigationItem.rightBarButtonItem = editButtonItem

此按钮已设置为调用该setEditing(_:animated:)方法并在 Edit 和 Done 之间切换按钮标题。

因此,您需要做的就是覆盖该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
    }
}
于 2018-01-16T03:07:00.997 回答