我已将以下代码用于撤消重做操作。我正在更改标签的背景颜色,并且撤消/重做操作正常,但是现在我添加了标签的文本颜色,因此每当我仅单独更改背景颜色或文本颜色时,它都可以正常工作,但是如果我同时更改背景颜色和文本颜色时间将无法正常工作。我该怎么办?请帮忙。!

@IBOutlet var myObject: UILabel!

//  MARK: - View Life Cycle
override func viewDidLoad() {
    super.viewDidLoad()
    myObject.backgroundColor = UIColor.yellow
}

func setMyObjectColor(_ color: UIColor) {
        (undoManager?.prepare(withInvocationTarget: self) as AnyObject).setMyObjectColor(myObject.backgroundColor!)
        myObject.backgroundColor = color
}

func setMyObjectTextColor(_ color: UIColor) {
        (undoManager?.prepare(withInvocationTarget: self) as AnyObject).setMyObjectTextColor(myObject.textColor!)
        myObject.textColor = color
}

@IBAction func changeColor(_ sender: Any){
    setMyObjectColor(UIColor.blue)
}

@IBAction func changeTextColor(_ sender: Any){
    setMyObjectTextColor(UIColor.white)
}

@IBAction func undo(_ sender: Any) {
    undoManager?.undo()
}

@IBAction func redo(_ sender: Any) {
    undoManager?.redo()
}}

最佳答案

@IBOutlet var myObject: UILabel!

//  MARK: - View Life Cycle
override func viewDidLoad() {
    super.viewDidLoad()
    myObject.backgroundColor = UIColor.yellow
}

func setMyObjectColor(_ Backcolor: UIColor) {
        (undoManager?.prepare(withInvocationTarget: self) as AnyObject).setMyObjectColor(myObject.backgroundColor!)
        myObject.backgroundColor = Backcolor
}

func setMyObjectTextColor(_ Textcolor: UIColor) {
        (undoManager?.prepare(withInvocationTarget: self) as AnyObject).setMyObjectTextColor(myObject.textColor!)
        myObject.textColor = Textcolor
}

func setMyObjectText(_ Text: String) {
    (undoManager?.prepare(withInvocationTarget: self) as AnyObject).setMyObjectText((myObject.text! as AnyObject) as! String)
    myObject.text = Text
}

@IBAction func changeColor(_ sender: Any){
    setMyObjectColor(UIColor.blue)
}

@IBAction func changeTextColor(_ sender: Any){
    setMyObjectTextColor(UIColor.white)
}

@IBAction func changeText(_ sender: Any) {
    setMyObjectText("Khush")
}

@IBAction func undo(_ sender: Any) {
    undoManager?.undo()
}

@IBAction func redo(_ sender: Any) {
    undoManager?.redo()
}

使用此代码,我的问题得到解决。

09-25 16:52
查看更多