Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 是否可以结束对字段编辑器的编辑';如何在不中断焦点的情况下进行控制?_Cocoa - Fatal编程技术网

Cocoa 是否可以结束对字段编辑器的编辑';如何在不中断焦点的情况下进行控制?

Cocoa 是否可以结束对字段编辑器的编辑';如何在不中断焦点的情况下进行控制?,cocoa,Cocoa,有时,强制结束当前正在进行的任何编辑是有意义的。例如,如果用户在“我的文档”的字段中键入值,然后单击预览窗口,或从菜单中选择“打印”或“保存” 问题是,通过强制结束编辑(通过要求NSWindow使自己成为第一响应者,或通过在窗口上调用endEditingFor:),第一响应者的焦点不再在相关字段上。在某些情况下,这会对用户造成干扰,此时所采取的操作是重复的,并不意味着他们对文档的工作结束 我解决这个问题的第一个尝试是关注当前的firstResponder是什么,然后在结束编辑后使用NSWindo

有时,强制结束当前正在进行的任何编辑是有意义的。例如,如果用户在“我的文档”的字段中键入值,然后单击预览窗口,或从菜单中选择“打印”或“保存”

问题是,通过强制结束编辑(通过要求NSWindow使自己成为第一响应者,或通过在窗口上调用endEditingFor:),第一响应者的焦点不再在相关字段上。在某些情况下,这会对用户造成干扰,此时所采取的操作是重复的,并不意味着他们对文档的工作结束

我解决这个问题的第一个尝试是关注当前的firstResponder是什么,然后在结束编辑后使用NSWindow的“makeFirstResponder:”恢复它。这可以正常工作,但会产生不希望的效果,例如,在NSTextFields上,将字段编辑器中的选择重置为字符串内容的整个长度

我是否可以使用一些技巧来强制调用整个“endEditing”方法系统,而不中断当前的字段编辑器

谢谢,
Daniel

为什么不使用您原来的方法,同时记录选择范围的位置/内容,并在恢复第一响应者后将其恢复?

我同意这是一种方法。在iPhone上,尤其重要的是不要让键盘在不合适的时候上下跳动。我使用了:

[textView endEditing:YES];
[textView becomeFirstResponder];

在对UITextView的内容采取操作之前,成功地完成了挂起的拼写更正(好像空格被击中),但没有任何副作用。

谢谢,也许这是最好的尝试。我看看会怎么样。它确实很管用,谢谢。我曾担心能否正确捕捉边缘案例,但出于我的目的(主要是恢复在字段编辑器中对聚焦文本字段的选择),有效的方法是从字段编辑器中获取selectedRanges并设置selectedRanges:完成后。