【问题标题】:How to turn setEditing state into toggle mode for Edit/Done button如何将 setEditing 状态转换为 Edit/Done 按钮的切换模式
【发布时间】:2018-01-16 01:53:22
【问题描述】:

我正在使用编辑/完成按钮在选择编辑模式时向上移动MKMAPView,目的是在屏幕底部的ImageView中显示消息。我的理解是改变这个按钮的功能我必须使用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 返回到超级视图的底部,不完全确定为什么。

【问题讨论】:

    标签: ios swift uiview uiviewcontroller setediting


    【解决方案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
        }
    }
    

    【讨论】:

    • 做到了!实际上,我已经在 viewDidLoad 中设置了 editButtonItem。我觉得我之前尝试过这段代码的其余部分,但它没有工作,但无论如何它现在可以 - 谢谢。
    • 很高兴为您提供帮助。请不要忘记通过单击答案左侧的复选标记来表明您的问题已成功回答。您可能希望对其他一些有合适答案的问题做同样的事情。
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多