首页 » 技术分享 » Browsers简介

Browsers简介

 

浏览器视图提供了一个用户界面,用于从数据列表或目录路径等分层组织的数据列表中显示和选择项。

本文讨论如何使用浏览器。关于浏览器视图提供关于浏览器的基本信息,并描述了当您选择浏览器项时会发生什么。浏览器界面特性描述了如何控制浏览器外观的某些方面。使用浏览器委托描述如何使用委托来填充浏览器中的数据。

关于浏览器视图

浏览器视图提供了一个用户界面,用于从数据列表或目录路径等分层组织的数据列表中显示和选择项。在处理数据层次结构时,级别显示在列中,列从左到右编号,以0开头。浏览器是由NSBrowser类实现的,它的每个列都包含一个NSScrollView,其中包含一个填充了NSBrowserCellsNSMatrixNSBrowser依靠委托在它的NSBrowserCells中提供数据。

浏览器视图如何工作

NSBrowser列中的每个条目都是NSBrowser Cell。这个单元格可以是分支单元格(如目录)或叶单元格(如文件)。一个分支cell显示一个图片,表示当该cell被点击时,浏览器视图将会显示一个新的NSBrowserCell列。为了显示新列,NSBrowser会自己发送addColumn消息,addColumn消息会通知它的委托加载下一列。NSBrowserCell也可以加载或卸载,加载的NSBrowserCells已经设置好状态,准备好显示了。如果你的代码需要访问一个特定的NSBrowserCell,可以使用NSBrowser的LoadedCellAtRow:column:方法。
用户的选择可以表示为字符串,如果选中的是多层的文件(如一个目录中的文件),则选中节点之前的路径用“/”分割。要使用其他字符作为分隔符,调用NSBrowsersetPathSeparate方法。

一个浏览器视图可以设置为每列允许选择多个cell或者限制为单选。当设置为单选时,它也可以设置为仅对叶子cell允许多选,或者允许同时选中两个类型的cell。

因为NSBrowser继承自NSControl,因此它有一个目标对象和动作消息。每次用户在每列中选择一个或多个cell时,浏览器视图会发送它的动作消息给目标对象。NSBrowser还添加了当用户双击一个条目时发送的操作,这允许用户在不采取任何操作的情况下选择条目,然后双击调用一些有用的操作,比如打开一个文件。

因为NSBrowserCell不继承NSActionCell,它不持有目标和动作值,不能直接参与目标/动作范例。但是,NSBrowser 的动作方法可以使用selectedCell方法获得最后一个选中的NSBrowserCell

浏览器界面特性

NSBrowser的用户界面特性可以通过多种方式改变。NSBrowser的水平滚动器可有可无。(相反,NSBrowser的列总有一个垂直滚动器-内容不多时滚动器可能会看不见)。正常情况下不应该创建一个没有水平滚动器的NSBrowser,如果那样做的话,必须要保证NSBrowser足够容纳所有的列并能正常显示。一个NSBrowser的列或许是有边框有标题、有边框无标题或者是无边框无标题。一个列标题或许可以从左边选中的列中得到,或者可以通过NSBrowser或它的代理直接指定。

图1 介绍一个NSBrowser的示例。

从上图中可以看出用户界面方面的东西:

  • 浏览器标题:可以通过在xib中的Title属性设置NSBrowser的标题
  • 列标题:可以通过NSBrowser的实例方法 setTitle:ofColumn:改变每列的标题,注意,如果在Interface Builder中设置浏览器的Title属性,它将显示在列0的标题的位置。
  • 分支指示器(Branch indicator):这个指示器是根据对应的NSBrowserCell对isLeaf消息的响应而显示的,指示符的存在告诉用户,当他们单击单元格时,右侧的列将显示该单元格下分层关联的信息。

使用浏览器委托

NSBrowser需要使用一个代理去提供给他需要展示的数据。该代理负责提供数据,并负责设置每个项目为分支或叶子cell、可用或不可用。它还可以接收事件通知,比如滚动,以及可能已经更改的列的验证请求。

可以执行两个类型的代理中的任何一个:主动或者被动。主动代理创建列的行(即NSBrowserCells)本身,然而被动式代理把此部分任务交给了NSBrowser。通常,建议使用被动式代理,因为它更方便调用。一个主动式代理必须执行browser:createRowsForColumn:去创建一个特定列的行。另一方面,被动式代理必须执行browser:numberOfRowsInColumn: 让NSBrowser知道需要创建多少行。以上两个方法是互斥的,只能执行其一,不能同时执行。(NSBrowser确定它拥有哪种类型的委托,委托通过哪种方法响应。)

两种类型的代理在单个cell显示之前均执行browser:willDisplayCell:atRow:column:方法去设置状态(如设置cell的文字以及是否是分支cell或者叶子cell),(该代理方法无需调用NSBrowserCell的setLoaded:方法,因为NSBrowser可以自身决定其状态。)主动式代理可以在创建单元格时设置所有单元格的状态,在这种情况下,它不需要实现browser:willDisplayCell:atRow:column:方法,但是被动式代理必须始终执行该方法。

转载自原文链接, 如需删除请联系管理员。

原文链接:Browsers简介,转载请注明来源!

0