标签: undo

禁用撤消以创建/删除NSManagedObject

在我的核心数据模型中,我有一个关系,称为listItems链接到几个listItem实体,每个实体都有一个stringValue属性.我创建了一个控件,它实际上是一个列表NSTextFields,每个列表项都有一个.控件绑定listItems正确,我已将其设置为按下返回键直接在当前编辑的字段下创建一个新字段,并将焦点更改为新字段.因此,基本上,要添加新项目,用户按下Return.

同样,如果用户结束编辑并且当前编辑的字段为空,则删除该字段(如图所示,空字段仅在"编辑模式"期间出现,可以这么说).这非常有效.基本上,在我的listItemNSManagedObject子类中,我执行以下操作:

// Don't allow nil values
if (!value && [[self.recipe ingredients] count] > 1) {
    for (EAIngredientRef *ingredient in [self.recipe ingredients]) {
        if ([[ingredient sortIndex] integerValue] > [[self sortIndex] integerValue]) {
            [ingredient setSortIndex:[NSNumber numberWithInteger:([[ingredient sortIndex] integerValue]-1)]];
        }
    }
    [[self managedObjectContext] deleteObject:self];
    return;
}

// Code to handle if it is a real value
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,每次以这种方式删除行时,它都会注册undoManager.因此,如果我编辑一行,请按Return键(创建一个新行),然后单击"离开"以结束编辑,该行将消失.但是,如果我然后撤消,则会再次出现空字段.我的目标是让undoManager忽略涉及空字段的删除操作.

我该怎么做?我已尝试在几个地方使用[[[self managedObjectContext] undoManager] disableUndoRegistration]和关联enableUndoRegistration(例如-didTurnIntoFault,但我怀疑撤销注册可能在该方法之前发生)

cocoa core-data undo objective-c

8
推荐指数
1
解决办法
2108
查看次数

撤消Git合并,但保留以后的更改,并重写历史记录

我有一堆分支,每个分支都有不同的功能.通常我会有一些额外的分支"not_master",它包含master + feature A,如下所示:

(not_master)     a--b--c--d--e---M--x--y--z
(feature A)           --h--i--j-/
Run Code Online (Sandbox Code Playgroud)

有时我想取消合并功能A,但保持x,y,z"not_master" 提交.

换句话说,我想这样:

(not_master)     a--b--c--d--e--x--y--z
Run Code Online (Sandbox Code Playgroud)

我看到我可以做一个git revert -m 1 M会在最终添加提交以恢复我的更改,但我真的不想这样做,因为这些提交还没有发布,所以添加更多提交会使历史记录更难阅读.

其他人建议只做一个git reset --hard M,但这将倾倒变化x,y,z.我只是在想这个完全错误的方式吗?我应该git reset --hard M和樱桃挑选x,y,z吗?

git undo git-merge

8
推荐指数
1
解决办法
1847
查看次数

如何从RichTextBox控件的撤消堆栈中删除操作?

似乎ClearUndo()在Windows窗体的RichTextBox中有这种方法(请参阅system.windows.forms.textboxbase.).

我需要类似的东西RichTextBox Control.这是因为(正如这里提到的:阻止将RichTextBox操作添加到控件的Undo堆栈中),每个更改都会添加到RichTextBox的撤消堆栈中.

我喜欢覆盖OnTextChanged事件并从Uno堆栈中删除一些这些更改.我怎样才能做到这一点?

谢谢.

c# wpf stack undo richtextbox

8
推荐指数
1
解决办法
1558
查看次数

HTML 输入 - 以编程方式设置输入值时撤消历史记录丢失

我有一个 HTML 输入。当用户在其中输入内容时,我设置了“输入”事件来处理将输入更新为用户输入内容的过滤版本(以及更新选择开始和选择结束以获得流畅的用户体验)。为了达到适当的效果,这种情况会不断发生。

然而,我注意到,每当 JS 通过 设置输入的值时input.value = '...';,输入的撤消历史记录就会消失。也就是说,在聚焦的情况下按 Ctrl-Z 不再返回到之前的状态。

有什么方法可以提供输入自定义撤消历史记录,或者以其他方式防止它丢失历史记录,同时仍然更改其值?


这是我的问题的一个最小示例:
输入顶部输入(基本在每个字符之间添加句点)后,Ctrl-Z 不会撤消。

<body>
    <input type="text" id="textbox" placeholder="No undo"/><br/>
    <input type="text" id="textbox2" placeholder="Undo"/>
    <script>
        var tbx = document.getElementById("textbox");
        tbx.addEventListener('input', () => {
            tbx.value = tbx.value + '.'
        });
    </script>
</body>
Run Code Online (Sandbox Code Playgroud)

javascript undo html-input

8
推荐指数
1
解决办法
1749
查看次数

Photoshop撤消系统

这个问题可能适用于一般的绘图系统.我想知道如何在PS中实现撤消功能.程序是否在每次操作之前拍摄画布的快照?如果是这样,这不会导致巨大的内存需求吗?我查看了Command模式,但我不太清楚它是如何应用于绘图的.

此致,门诺

photoshop drawing undo

7
推荐指数
2
解决办法
973
查看次数

如何在emacs中撤消call-last-kbd-macro

在emacs中,我有时会错误地调用call-last-kbd-macro.在撤消时我会预期撤销以原子方式撤消键盘宏的整个效果,但这不会发生.相反,我发现自己必须一次撤消宏的每一步.如何在执行宏之前让emacs返回缓冲区状态?

emacs undo

7
推荐指数
1
解决办法
530
查看次数

Jquery撤消对DOM的最后更改

撤消对Dom进行的最后一次更改的最简单方法是什么?假设我附加了一个图像或div,或者我们对任何元素进行了更改,我想撤消影响dom的最后一件事.

jquery dom undo

7
推荐指数
1
解决办法
7797
查看次数

如何使NSUndoManager的撤消/重做动作名称正常工作?

我正在学习Cocoa,而且我没有遇到太多麻烦而无法工作.但是setActionName:方法令我感到困惑.这是一个简单的例子:一个玩具应用程序,其窗口包含一个文本标签和两个按钮.按"开"按钮,标签显示"开".按"关闭"按钮,标签将更改为"关闭".以下是两个相关的方法(我为应用程序编写的唯一代码):

-(IBAction) turnOnLabel:(id)sender
{
    [[self undoManager] registerUndoWithTarget:self selector:@selector(turnOffLabel:) object:self];
    [[self undoManager] setActionName:@"Turn On Label"];
    [theLabel setStringValue:@"On"];
}

-(IBAction) turnOffLabel:(id)sender
{
    [[self undoManager] registerUndoWithTarget:self selector:@selector(turnOnLabel:) object:self];
    [[self undoManager] setActionName:@"Turn Off Label"];
    [theLabel setStringValue:@"Off"];
}
Run Code Online (Sandbox Code Playgroud)

这就是我的期望:

  • 我单击"开"按钮
  • 标签更改为"开启"
  • 在编辑菜单中是"撤消打开标签"项
  • 我点击该菜单项
  • 标签更改为"关闭"
  • 在编辑菜单中是"重做打开标签"项

事实上,除了最后一个之外,所有这些都是我所期望的."编辑"菜单中的项目显示"重做关闭标签",而不是"重做打开标签".(当我点击该菜单项时,标签确实会转为开启,正如我所料,但这使菜单项的名称更加神秘.

我有什么误解,怎样才能让这些菜单项显示我想要的方式?

cocoa undo nsundomanager

7
推荐指数
1
解决办法
3212
查看次数

Hg:删除最新提交

我过去使用过Git而且我是一个Hg菜鸟:

我有以下存储库结构:

o [> default] commit A
|
o commit B
.
.
.
o <a-tag]
|
Run Code Online (Sandbox Code Playgroud)

我已经更新了提交,a-tag并提交了一些其他提交.我现在有

o [> default] commit C
|
o commit D
|
|  o [default] commit A
|  |
|  o commit B
|  .
|  .
|  .
| /
o <a-tag]
|
Run Code Online (Sandbox Code Playgroud)

现在(在推送之前)我意识到我有我的提交commit Ccommit D基于错误的提交.我怎样才能回到初始状态(无需重新克隆存储库)丢弃这些提交commit Ccommit D(吊坠git reset --hard a-tag)?

mercurial undo

7
推荐指数
1
解决办法
4489
查看次数

"[NSBigMutableString substringWithRange:]:范围{0,10}越界;字符串长度9"错误与撤消

当我尝试撤消时,我的应用程序崩溃了UISearchBar.在我的应用程序中,我有代码阻止在搜索栏上输入'%'符号,为此,它将textDidChange方法中的%替换为@"",如下所示:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
   self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我输入文本"abc%xyz",搜索栏上显示的最终文本将为"abcxyz".不,当我点击撤消时,我看到'xyz'被清除了,我仍然在搜索栏上看到'abc',而不是一次性清除'abcxyz'.

现在,如果我再次单击撤消以清除'abc',我的应用程序会因[NSBigMutableString substringWithRange:]: Range out of bounds错误而崩溃.

我假设即使'%'被@""替换,撤消管理器可能仍然持有它,因此范围超出范围.

[searchBar.undoManager removeAllActions];textDidChange用@""替换%之后尝试过,但它没有帮助.这是代码:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {
       self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""];
      [searchBar.undoManager removeAllActions];
    }
Run Code Online (Sandbox Code Playgroud)

问:以前有人遇到类似的问题吗?如何处理撤消?

undo objective-c uisearchbar nsundomanager ios

7
推荐指数
1
解决办法
2674
查看次数