探索iOS与Mac应用开发:从UIKit到AppKit
1. 开发iOS应用的初步探索
在开发iOS应用时,即便只是让一个简单的应用在模拟器中运行,也涉及到大量的信息,不过Xcode为我们提供了很大的帮助。目前我们对用于开发iOS应用的庞大API集仅仅是浅尝辄止。
在iOS应用开发中,涉及到视图控制器的使用以及iOS对视图的内存管理。同时,我们还探讨了iOS特有的类,并且分析了iOS与OS X的相似和不同之处。
2. 开启Mac应用开发之旅:CaseTool项目
现在,我们将目光转向Mac应用开发,以CaseTool项目为例,详细介绍开发过程。
2.1 创建项目
使用Xcode创建项目,具体步骤如下:
1. 运行Xcode,在启动界面点击“Create a New Xcode Project”;若Xcode已运行,选择“File > New > New Project”。
2. 在Mac OS X下的左侧表格中选择“Application”,若未选中则进行选择。
3. 选择“Cocoa Application”,然后点击“Next”设置应用选项。
4. 设置项目选项:
-
Product Name
:输入“CaseTool”。
-
Company Identifier
:采用反向域名格式,如“com.MySuperCompany”,该字段区分大小写。
-
Class Prefix
:通常输入三个或更多字符,这里使用“MSC”,用于为创建的类名添加前缀,避免与第三方框架中的类名冲突。
-
App Store category
:选择“Utilities”。
- 取消选中“Create Document-Based Application”、“Use Core Data”和“Include Unit Tests”,仅选中“Use Automatic Reference Counting”。
5. 选择项目保存目录,可选择创建Git仓库。
创建完成后,在Xcode窗口左侧的CaseTool组中可以看到项目已包含的文件:“MSCAppDelegate.h”、“MSCAppDelegate.m”和“MainMenu.xib”,其中“MSCAppDelegate”是应用的控制对象。
2.2 定义委托接口
使用Xcode的Interface Builder编辑器来布局窗口内容,并建立“MSCAppDelegate”与用户界面控件之间的连接。以下是委托的头文件:
#import <Cocoa/Cocoa.h>
@interface MSCAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@end
这里的“IBOutlet”和“IBAction”并非真正的Objective - C关键字,而是Apple为Interface Builder保留的。“IBOutlet”用于标记可连接到Interface Builder中对象的实例变量,“IBAction”用于标记可作为用户界面操作目标的方法。
2.3 打开Interface Builder
在Xcode项目窗口中找到并点击“MainMenu.xib”,打开Interface Builder编辑器。虽然文件扩展名为“.xib”,但实际上是nib文件(“NeXT Interface Builder”的缩写),.xib文件是XML格式的nib文件,在编译时会被编译为nib格式。
Interface Builder编辑器左侧的dock包含代表nib文件内容的图标,点击dock底部右侧的圆形箭头可展开显示对象名称。编辑器窗口顶部是应用的菜单栏,下方是用于放置文本字段和按钮的空窗口。
在编辑器右下角的库面板中,点击左侧第三个类似盒子的图标,切换到Object Library,这里包含各种可拖入窗口的对象,可通过底部的搜索框筛选。
2.4 布局用户界面
从Object Library中拖出所需对象进行用户界面布局:
1. 找到“Text Field”并拖入窗口,拖动时会出现蓝色指导线,帮助按照Apple用户界面规范布局。
2. 拖出“Label”,用于显示大小写转换结果。
3. 拖出一个“Push Button”,双击按钮编辑标签为“UpperCase”。
4. 再拖出一个按钮,将标签改为“LowerCase”。
5. 调整文本字段、标签和窗口的大小,使界面更加美观。
以下是操作步骤的表格总结:
|操作步骤|具体内容|
| ---- | ---- |
|创建项目|运行Xcode,选择Cocoa Application,设置项目选项,选择保存目录|
|定义委托接口|编辑“MSCAppDelegate.h”,使用“IBOutlet”和“IBAction”|
|打开Interface Builder|点击“MainMenu.xib”,了解nib文件和编辑器布局|
|布局用户界面|从Object Library拖出文本字段、标签和按钮,调整界面|
mermaid流程图如下:
graph LR
A[开始] --> B[创建项目]
B --> C[定义委托接口]
C --> D[打开Interface Builder]
D --> E[布局用户界面]
E --> F[结束]
探索iOS与Mac应用开发:从UIKit到AppKit
3. 建立代码与用户界面的连接
在完成用户界面布局后,接下来需要将代码与界面元素进行连接。
3.1 连接输出口(Outlets)
使用Assistant Editor来连接输出口,具体步骤如下:
1. 点击Xcode窗口右上角“Editor”的中间按钮,将编辑器垂直分割为两个部分,即Assistant Editor。若需要更多空间,可将dock设置为仅显示图标的最小版本。
2. 按住Control键,从文本字段拖动到“MSCAppDelegate.h”文件中@property行下方,直到出现“Insert Outlet or Action”提示。
3. 松开鼠标后,会弹出一个对话框,在名称区域输入“textField”,然后点击“Connect”。这将在头文件中创建“textField”属性以及其他所需的关键字。
4. 对标签重复上述连接过程,将其命名为“resultsField”。
5. 在Inspector的Connections面板中检查连接情况。可以通过选择“View > Utilities > Show Connection Inspector”或点击Inspector上类似右箭头的“Connections”按钮来查看。
3.2 连接动作(Actions)
将按钮与动作进行连接,使按钮点击时触发相应代码:
1. 控制点击“UpperCase”按钮,拖动到“MSCAppDelegate.h”文件中最后一个@property下方。
2. 当连接框弹出时,将连接类型更改为“Action”,在名称字段输入“uppercase”,然后点击“Connect”。这将在头文件中创建方法原型,并在.m文件中创建一个空的实现。
3. 对“LowerCase”按钮重复上述连接过程,将名称改为“lowercase”。
以下是连接步骤的表格总结:
|连接类型|操作步骤|
| ---- | ---- |
|连接输出口|使用Assistant Editor,Control - 拖动文本字段和标签到头文件,输入名称并连接|
|连接动作|Control - 拖动按钮到头文件,更改连接类型为Action,输入名称并连接|
mermaid流程图如下:
graph LR
A[开始] --> B[连接输出口]
B --> C[连接动作]
C --> D[结束]
4. 实现AppDelegate
完成界面和连接后,需要实现“MSCAppDelegate”类。
4.1 理解IBOutlet的工作原理
当nib文件(如“MainMenu.xib”)在应用启动时自动加载,其中存储的对象会被重新创建,即进行alloc和init操作。在init方法中,所有IBOutlet实例变量初始值为nil,只有在nib文件中的所有对象(包括窗口、文本字段和按钮)创建完成后,连接才会建立。之后,会向每个创建的对象发送“awakeFromNib”消息。
4.2 实现代码
以下是“MSCAppDelegate”的实现代码:
#import "MSCAppDelegate.h"
@implementation MSCAppDelegate
- (id) init
{
if (nil != (self = [super init]))
{
NSLog (@"init: text %@ / results %@", _textField, _resultsField);
}
return self;
}
- (void)awakeFromNib
{
NSLog (@"awake: text %@ / results %@", _textField, _resultsField);
[_textField setStringValue:@"Enter text here"];
[_resultsField setStringValue:@"Results"];
}
- (IBAction) uppercase: (id) sender
{
NSString *original = [_textField stringValue];
NSString *uppercase = [original uppercaseString];
[_resultsField setStringValue:uppercase];
} // uppercase
- (IBAction) lowercase: (id) sender
{
NSString *original = [_textField stringValue];
NSString *lowercase = [original lowercaseString];
[_resultsField setStringValue:lowercase];
} // lowercase
@end
在上述代码中:
-
init
方法用于展示在初始化时IBOutlet实例变量的值为nil。
-
awakeFromNib
方法用于设置文本字段的默认值。
-
uppercase:
方法获取文本字段中的原始字符串,将其转换为大写,并将结果显示在结果字段中。
-
lowercase:
方法与
uppercase:
方法类似,只是将字符串转换为小写。
运行程序后,会出现窗口,输入字符串并点击按钮,即可实现大小写转换。
通过以上步骤,我们完成了从iOS应用开发的初步探索到Mac应用CaseTool项目的开发,包括项目创建、界面布局、代码与界面的连接以及AppDelegate的实现。整个过程展示了如何利用Xcode和Interface Builder开发出具有用户交互功能的Mac应用。
超级会员免费看
46

被折叠的 条评论
为什么被折叠?



