调用什么函数来撤消在 UITextField 中所做的更改?

What function to call to undo a change made in a UITextField?

在iOS虚拟键盘的快捷栏中有一个撤销按钮,可以撤销编辑。有没有办法将任意按钮与该功能相关联?

来自iOS 8、摇动设备应该触发撤消操作。您的视图控制器应该是第一响应者,以便它可以响应撤消触发器。您可以通过成为视图即将出现的第一响应者来拥有它,然后在它即将消失时辞职

override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        becomeFirstResponder()
    }
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        resignFirstResponder()
    }
    override func canBecomeFirstResponder() -> Bool {
        return true
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }

这是我实现的解决方案(重做功能也可以这样做)。

import UIKit

class ViewController: UIViewController, UITextViewDelegate {

 @IBAction func undoButtonPressed(sender: AnyObject) {
        mainTextField.undoManager?.undo()
        enableDisableUndoButton()
    }

    func enableDisableUndoButton() { // to disable or enable the button when needed
        if mainTextField.undoManager?.canUndo == true {
            undoButton.enabled = true
        } else {
            undoButton.enabled = false
        }
    }

    func textViewDidChange(mainTextField: UITextView) { // monitors when user makes changes in the text field
        enableDisableUndoRedoButtons()
    }

}

为了让 undoManager 记录通过字段上的代码所做的文本更改,我使用了这个:

mainTextField.replaceRange((theRange), withText: newStr)