And*_*row 5 cocoa objective-c nsview nstextview nstableview
因此,如果我有基于NSView的tableview,并且视图内部是NSTextViews,它们是不可编辑但可选择的......
如何才能获得命令A的优秀功能选择所有文本?我不是指行选择.我为tableview禁用了行选择.我的意思是用蓝色突出显示文本,以便将其复制到剪贴板.但不只是1行NSTextView的文本,所有行都来自所有行.
除了命令之外,点击和拖动也应该这样做.但开箱即用似乎我只能选择一行的文字.这是显示问题的视频:
https://dl.dropboxusercontent.com/u/2510380/table.mov (我一直点击并拖动但不能突出显示下一行的文字)
这里有两个mac应用程序(skype和gabble)执行此操作:
https://dl.dropboxusercontent.com/u/2510380/skype.mov
和
https://dl.dropboxusercontent.com/u/2510380/gabble.mov
假设他们不使用仅包含HTML的WebViews,那么如何通过剪贴板获得此控制?即在Skype中,您选择文本,仅突出显示会话,而不是每条消息的时间戳.复制到剪贴板的文本格式也非常好.你能指出我正确的方向来反向设计skype吗?
不幸的是,没有办法轻松做到这一点。这是因为一次只有一个控件可以成为第一响应者。这意味着,尽管您可以在多个文本视图中进行选择,但仍存在以下几个问题:
实际上,只有一个文本视图的文本会使用“实时”突出显示颜色突出显示;其他控件将具有非焦点控件的灰色突出显示。
复制命令仅适用于第一响应者文本视图。
拖动会话将从鼠标实际指向的控件启动(无论第一响应者是谁),并且只会拖动该控件的文本。
在基于视图的表视图中,对于当前未显示的行,控件甚至可能不“存在”,因此除非您强制创建每一行,否则它永远不会收到消息,这对于大型表来说可能成本高昂。
知道了这一切,您也许可以通过让您的控制器参与文本视图和表视图子类在第一响应者时对全选消息的特殊处理来“伪造它”。收到此消息后,文本视图子类可以调用 super 然后通知控制器(以获取其默认行为并让您知道它发生了),此时控制器可以转身并将命令发送到所有(现有)文本视图。可以通过覆盖文本视图的绘图来欺骗突出显示,并且拖动启动可以推迟到委托(控制器),该委托将处理将模型中的所有字符串写入粘贴板(甚至不接触可能不存在的行视图中的文本视图) )。表视图子类将简单地将相同的全选消息传递给控制器,而不调用 super (甚至在返回之前强制确保没有选择任何内容)。
我希望这有帮助。如果我忘记了您的任何要求,请告诉我。
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |