- 到目前为止,我们所写的程序都使用了Foundation Kit,并通过文本输出结果发送到控制台的原始方式向我们传达信息。
- 利用Application Kit(简称AppKit)创建用户界面程序
- 我们要创建的应用程序的名称是CaseTool,它显示了一个窗口,包含一个文本框,一个标签和两个按钮。向文本框输入文本并点击一个按钮后,输入的文本就会转换为大写或小写状态。
- 总体思路:创建项目文件->对用户界面布局->建立UI和代码之间的关联。
源码及程序:链接:https://pan.baidu.com/s/1_bVIEjIkHWTLb5rCEeMw9w 密码:fhkw
1.构建项目
- 创建程序:打开Xcode,在启动界面点击Create a New Xcode Project选项。选择macos下的Cocoa App
- 输入程序名称CaseTool,语言选择Objective-C,其他的暂时不用管。
- 完成这些你就创建好了一个新项目,打开CaseTool群组,将会看到项目中已经存在了一些文件:AppDelegate,ViewController等。
- AppDelegate定义了整个项目的委托关系,也就是消息响应关系。ViewController管理界面视图的。
2.创建委托文件的@interface部分
- 我们将使用Xcode中的Interface Builder编辑器来布局窗口内容,并在ViewController与用户界面之间创建各种连接。
- Interface Builder也适用于布局iOS应用程序,因此无论你要为哪一个平台开发应用程序,都需要在Interface Builder上进行很多工作
- 你会看到一个IBOutlet的关键字,它不是一个真正的Objective-C关键字,但我们通常会在Interface Builder中使用它。你可能之翼到了在IBOutlet哪行代码的左边边栏有一个小点。点击那个点就会直接跳转到Interface Builder中与其相关的对象。
- 我们之后还会遇到另一个像关键字的IBAction。IBAction被定义为void的作用,这意味着这个在文件中声明的方法返回的类型将是void(也就是什么都不返回)。
- 如果IBOutlet和 IBAction不执行任何操作,为什么还要定义它们呢?原因是它们不是用于编译的,而是为Interface Builder以及阅读代码的人提供的标记。
3.Interface Builder
- 是时候使用Xcode的Interface Builder编辑器了,有些人会将其成为IB。
- 我们现在要编辑的是项目创建时附带的storyboard文件,这个文件配备了一个菜单栏以及一个可以放置用户控件的窗口。
- 注意编辑器区域的左边,Interface Builder的dock面板包含了表示nib文件内容的图标。目前,我们可以展开dock面板来显示对象的名称。dock面板底部右边的圆形中有个箭头,点击它就可以看到dock面板中各项的内容。
- 编辑器窗口顶端是我们所创建的应用程序的菜单栏。你可以添加编辑菜单以及菜单项。
- 菜单栏下面就是我们用来放置文本框和按钮的空窗口。dock面板上窗口形状的图标所表示的就是这个真实可见的窗口。
- 现在,我们要使用右下角的库面板,
说明:虽然文件的扩展名是xib,我们仍称之为nib(NeXT Interface Builder)文件。nib文件是包含了压缩对象的二进制文件,而.xib文件是XML格式的nib文件。在编译时,.xib文件将会编辑为nib格式。
4.设计用户界面
- 现在可以对用户界面布局了。在库中先找到TextField,然后将其拖到窗口中,在拖动过程中,你将会看到窗口中出现了蓝色的引导线,这有利于你按照苹果公司的用户界面规范对对象进行布局。
- 在库里面找到label图标并将其拖入窗口,我们用这个来显示转换成大写或小写的字符串结果。
- 在库中找到点击按钮(push Button),将其拖入窗口,双击刚刚放入的按钮,上面的文字就会变成可编辑状态。输入UpperCase,并按回车键以完成修改。
- 在库中找到点击按钮(push Button),将其拖入窗口,双击刚刚放入的按钮,上面的文字就会变成可编辑状态。输入LowerCase,并按回车键以完成修改。
- 接下来,简单进行一下内部修饰,调整文本框和窗口的大小,使其更加美观。我们也对标签(label)的尺寸进行了调整,使其几乎横跨了整个窗口(表面上看不见)。标签必须足够宽,以便显示你输入到文本框中的内容。
5.创建连接
介绍如何将代码与刚才创建的用户界面元素相连接。
5.1连接输出口(IBOutlet)
- Xcode窗口的右上角有三个标记为Editor的按钮,点击中间的按钮,就会将编辑器从中间垂直分成两部分,这就是辅助编辑器。
- 接下来,按住Control键并将光标拖动到头文件,出现“Insert Outlet or Action”提示消息再松手。松开鼠标会弹出如上图的一个对话框。
- 对话框第一项是选择Outlet还是Action,第二项是Name文本框,我们输入“textField”,并点击Connect按钮。这样做会在头文件中创建“textField”属性。
- 接下来对标签(label)重复之前的连接步骤并将其命名为“resultField”。
5.创建连接
5.2连接操作(IBAction)
- 现在,我们将代码连接到操作,这样按下按钮就会触发代码
- 按住Control键并拖动鼠标到头文件,连接对话框会再次弹出。这次,要将连接类型改成Action。在Name文本框中输入UpperCase,并点击Connect按钮。
- 上面的操作将会在头文件中创建方法的声明,并会在.m文件中创建方法的实现(内容为空)。
- 现在,只要单击该按钮,UpperCase:消息就会如我们所想的那样发送给ViewController。我们可以在其中UpperCase执行任何想要的代码。
- 最后连接LowerCase按钮,按住Control键并拖动鼠标到头文件,将连接类型改成Action,连接名称设为“LowerCase”
注意:
拖动路径的方向是使用Interface Builder时一个容易引起混淆的地方。拖动的方向应该是从“需要了解某些内容的对象”到“被了解的对象”。