CocoaGUI开发:响应输入与表格视图使用
立即解锁
发布时间: 2025-08-25 02:21:22 阅读量: 2 订阅数: 8 


Mac上学习Cocoa:从零开始的全面指南
# Cocoa GUI开发:响应输入与表格视图使用
## 1. 响应输入
在能够展示反派角色的各种属性后,接下来要编写代码来捕捉用户对这些字段所做的更改。之前创建了由各种GUI控件触发的空操作方法,现在要填充这些方法,让它们发挥实际作用。同时,还需实现一个委托方法,以便从窗口中不使用目标/动作机制的NSTextView获取编辑后的值。
### 1.1 处理反派名称输入
以用于显示和编辑反派名称的NSTextField为例,它会触发`takeName:`方法。将该方法修改如下:
```objc
- (IBAction)takeName:(id)sender {
[self.villain setObject:[sender stringValue] forKey:kName];
NSLog(@"current villain properties: %@", self.villain);
}
```
此方法首先从发送者(即文本字段本身)获取字符串值,并将其传递给反派对象以设置其名称。由于包含了`@synthesize villain`指令,可直接引用`villain`。最后通过`NSLog`输出反派的当前属性,这有助于调试和测试代码。
### 1.2 其他简单操作方法
其他操作方法与`takeName:`方法类似,它们将GUI中的值应用到模型对象。以下是所有“简单”操作方法的代码:
```objc
- (IBAction)takeLastKnownLocation:(id)sender {
[self.villain setObject:[sender stringValue] forKey:kLastKnownLocation];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takeLastSeenDate:(id)sender {
[self.villain setObject:[sender dateValue] forKey:kLastSeenDate];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takeSwornEnemy:(id)sender {
[self.villain setObject:[sender stringValue] forKey:kSwornEnemy];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takePrimaryMotivation:(id)sender {
[self.villain setObject:[[sender selectedCell] title]
forKey:kPrimaryMotivation];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takePowerSource:(id)sender {
[self.villain setObject:[sender title] forKey:kPowerSource];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takeEvilness:(id)sender {
[self.villain setObject:[NSNumber numberWithInteger:[sender
integerValue]] forKey:kEvilness];
NSLog(@"current villain properties: %@", self.villain);
}
- (IBAction)takeMugshot:(id)sender {
[self.villain setObject:[sender image] forKey:kMugshot];
NSLog(@"current villain properties: %@", self.villain);
}
```
将这些代码添加到`VillainTrackerAppDelegate`的`@implementation`部分,编译并运行应用程序,就可以编辑之前处理的所有字段,并在输出日志中看到值的变化。设置头像图片时,只需将Mac上的任何图像拖放到头像视图中即可。
### 1.3 处理复杂视图输入
#### 1.3.1 处理能力复选框矩阵
对于能力复选框矩阵,获取值的过程稍复杂,需要找到所有选中的复选框并获取其关联的字符串。代码如下:
```objc
- (IBAction)takePowers:(id)sender {
NSMutableArray *powers = [NSMutableArray array];
for (NSCell *cell in [sender cells]) {
if ([cell state]==NSOnState) {
[powers addObject:[cell title]];
}
}
[self.villain setObject:powers forKey:kPowers];
NSLog(@"current villain properties: %@", self.villain);
}
```
编译并运行应用程序,点击能力矩阵中的复选框,输出日志会相应更新。
#### 1.3.2 处理备注视图输入
对于NSTextView类型的备注视图,采用简单的方法,每次用户编辑文本后(即每次按键后)获取值的副本。代码如下:
```objc
- (void)textDidChange:(NSNotification *)aNotification {
[self.villain setObject:[[self.notesView string] copy] forKey:kNotes];
NSLog(@"current villain properties: %@", self.villain);
}
```
这里创建了`notesView`的`string`方法返回结果的副本,是为了避免多个反派对象引用同一个字符串而导致的混淆。
### 1.4 操作步骤总结
以下是响应输入的操作步骤:
1. 修改`takeName:`等操作方法,将GUI中的值应用到模型对象。
2. 将这些方法添加到`VillainTrackerAppDelegate`的`@implementation`部分。
0
0
复制全文
相关推荐










