Cocoa学习

我的Cocoa/Cocoa Touch学习笔记

Twitter for Mac风格的Sheet定位

昨天在用Twitter的时候,突然意识到,在删除Twitter消息的时候弹出的Sheet是定位在要删除的那条消息的顶部,而不是窗口标题栏的下方。

我很好奇这是如何做到的。今天抽了点时间,在简单的查阅文档之后,我找到了答案。其核心就是NSWindowDelegate的一个方法:-window:willPositionSheet:usingRect:,可以指定Sheet的显示位置。

我做了一个简单的View-based Table View(Lion下),然后用下面的方法做了实现:

点击按钮复制粘贴到文本框

相信很多读者看到标题肯定会疑惑,文本框本来就支持复制粘贴,为什么要专门写一篇日志来介绍文本框的复制粘贴呢?其实,本文要讲述的是,如何通过按下按钮,来复制粘贴文本到文本框 – 不是通过菜单操作,也不是通过快捷键cmd-c和cmd-v来完成。

提到复制粘贴的菜单操作和快捷键操作,看过“Cocoa Programming for Mac OS X”的读者肯定知道,他们属于“nil-targeted action”,也就是说,他们的receive是在运行时被指定的。在Interface Builder中,-copy:-paste:方法都是连接到一个占位对象“First Responder”上的。而First Responder到底是谁是在程序运行过程中动态变化着的。

事实上,在NSTextField这个例子中,-copy:-paste:的Receive是一个NSText对象。知道了这一点,剩下的问题就是如何获取这个对象。

自定义UINavigationBar的背景

为了让我们的应用程序更加美观,我们往往希望对iPhone自带的控件进行一点自定义。比如,本文即将要讲述的,给UINavigationBar加一个背景。

最简单的一个自定义方法就是修改一下背景色。方法非常简单,那就是使用它的tintColor属性:

在Mac和iOS中注册自定义的URL Scheme

URL Scheme是类似http://ftp://afp://这样的东西,通常是用传输协议作为URL Scheme。不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。

要在程序中注册自定义URL Scheme非常简单。主要分为两个步骤:在程序的Info.plist中加入你需要注册的URL Scheme,然后在你的应用程序中加入处理这类请求的代码。

其中,第一个步骤对于iOS和Mac应用程序来说是完全相同的。方法如下:

在iOS程序中使用自定义字体

好久没有更新这里了,今天开始慢慢恢复更新。好了,废话不多说,开始讲正题。今天的话题其实也很简单,那就是在iOS中使用自定义字体。

虽然iOS自带的字体通常已经足够我们使用了,但是,对于某些特殊程序来说,比如,电子书程序,可能需要用到一些特殊的字体,或者需要用更好看的字体来达到我们想要的显示效果。不过,iOS是不支持系统级安装新字体的。不过在iOS 3.x中,我们已经可以用一个很简单的方法来使用自定义字体了。

我们来创建一个简单的iOS项目来做演示。在界面上拖入一个UITextView,在代码中创建一个IBOutlet指向这个UITextView。我们从OSX中找一个iOS下没有的字体,比如:PTSans.ttc(这个也是Octopress模版的默认字体,我很喜欢这个字体),拖放到项目中。

打开info.plist,增加一个新的Array类型的键,键名设置为UIAppFonts(Fonts provided by application),增加字体的文件名:“PTSans.ttc“。

然后我们就可以在程序中调用这个字体了: