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

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

关于浏览器视图

浏览器视图提供了一个用户界面,用于从数据列表或目录路径等分层组织的数据列表中显示和选择项。在处理数据层次结构时,级别显示在列中,列从左到右编号,以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简介相关推荐

  1. web安全简介_Web安全:HTTP简介

    web安全简介 by Alex Nadalin 通过亚历克斯·纳达林 Web安全:HTTP简介 (Web Security: an introduction to HTTP) This is part ...

  2. Zepto.js简介

    Zepto.js简介 一.总结 一句话总结: Zepto.js语法和jquery起码百分之90相似,主要做移动端框架,和jquery mobile是一个类型的概念 1.Zepto.js做移动端的特点? ...

  3. react jquery_2019年React简介(面向仅了解jQuery的人们)

    react jquery by Julien Benchetrit 通过朱利安·贝肯特里特 2019年React简介(面向仅了解jQuery的人们) (An Introduction to React ...

  4. HTML5和Intersection Observer的响应式图像优化简介

    by Riccardo Canella 里卡多·卡内拉(Riccardo Canella) HTML5和Intersection Observer的响应式图像优化简介 (An intro to res ...

  5. How browsers work

    原文:http://taligarsiel.com/Projects/howbrowserswork1.htm 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在 ...

  6. selenium简介_什么是Selenium? Selenium简介

    selenium简介 什么是Selenium? (What is Selenium?) Selenium is a free Open source functional Testing tool u ...

  7. Fiddler简介与功能

    简介 Fiddler是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 .它能够记录客户端和服务器之间的所有请求,可以针对特定的请求,分析请求数据.设置断点.调试web应用.修改请求的数据 ...

  8. gss1_GSS简介:网格样式表

    gss1 You may have recently heard of Grid Style Sheets (GSS) in the world of HTML and CSS. GSS re-ima ...

  9. css硬件加速_CSS动画的硬件加速简介

    css硬件加速 In the last couple of years we've often heard about hardware acceleration and how it helps t ...

  10. Gentler编程简介

    by Matt Adesanya 马特·阿德桑亚(Matt Adesanya) Gentler编程简介 (A Gentler Introduction to Programming) This wri ...

最新文章

  1. k8s入门系列之介绍篇
  2. 家用电器用户行为分析与事件识别_用户行为分析埋点实时数仓实践
  3. 分享预告:「数据安全问题」+「 股权与期权」
  4. python的selenium模块博客园_selenium 模块的使用
  5. Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
  6. 呐,你要的新年攻略和文章汇总
  7. java中的容器问题
  8. android 桌球游戏,安卓上目前最台球游戏《台球帝国》测评
  9. matlab中测交流电压,间接测量交流电压有效值的方法与应用
  10. 后场村的加班别有不同
  11. 图像处理——乘性噪声和加性噪声
  12. 二进制方式部署k8s集群1.21版本-域名形式
  13. Oleg Shilo:基于CS-Script的Notepad++的插件_.Net技术
  14. 华为研发小仙女自述:我和开发的“撕逼”日常
  15. Microsoft Edge浏览器上不了网,其他浏览器可以
  16. python爬虫实验总结_python3爬虫总结(共4篇).docx
  17. 浅谈如何进行网站结构优化
  18. 虚拟运行ur5时,出现的问题
  19. 亿美软通 短信接口整合(JAVA)
  20. Object.keys()、Object.values()、Object.entries()的用法

热门文章

  1. 利用全加器实现7段数码管_[走近FPGA]之数码管动态显示
  2. 英语二 - 常用词根二
  3. 家用计算机初步,职称计算机Internet基础知识:配置家庭局域网
  4. bat一键清理系统垃圾/系统日志
  5. 全球与中国抗口腔粘膜炎药物市场深度研究分析报告
  6. winedt103系统找不到指定文件_latex排版入门(winEdit系统找不到指定文件的解决办法)...
  7. 边境的悍匪—机器学习实战:第五章 支持向量机
  8. 学期博客:学习进度条
  9. 映客卖身、花椒获资、抖音崛起——直播和短视频现状分析
  10. 艾艾贴常用的数据类型转换