构建可交互的GUI应用:从输入响应到表格视图的实现
立即解锁
发布时间: 2025-08-25 02:28:33 阅读量: 1 订阅数: 9 

### 构建可交互的GUI应用:从输入响应到表格视图的实现
在开发GUI应用时,处理用户输入和展示数据是两个关键的方面。下面将详细介绍如何实现对用户输入的响应,以及如何使用表格视图来展示和管理数据。
#### 1. 响应输入
当我们能够展示反派角色的各种属性后,接下来需要编写代码来捕捉用户对这些字段所做的更改。之前我们创建了由各种GUI控件触发的空动作方法,现在是时候填充这些方法,让它们发挥实际作用了。
##### 1.1 处理反派名称输入
首先从用于显示和编辑反派名称的`NSTextField`开始,它会触发`takeName:`方法。将该方法修改如下:
```objc
- (IBAction)takeName:(id)sender {
[self.villain setObject:[sender stringValue] forKey:kName];
NSLog(@"current villain properties: %@", self.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`部分,编译并运行应用程序,就可以编辑之前处理过的所有字段,并在输出日志中看到它们的值发生变化。
##### 1.3 处理复杂视图
对于“Powers”复选框矩阵,获取其值稍微复杂一些,因为需要找到所有被选中的复选框并获取其关联的字符串。以下是相应的代码:
```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);
}
```
编译并运行应用程序,在“Powers”矩阵中进行点击操作,输出日志将相应更新。
##### 1.4 处理笔记视图
最后,需要实现一个方法来从“Notes”视图(`NSTextView`的实例)中获取值。这里采用简单的方法,每次用户编辑文本时都获取其值:
```objc
- (void)textDidChange:(NSNotification *)aNotification {
[self.villain setObject:[[self.notesView string] copy] forKey:kNotes];
NSLo
```
0
0
复制全文
相关推荐










