当我从中选择一行时NSTableView
,它没有运行代码tableViewSelectionDidChange
方法。我在这个方法中设置了断点,但它甚至没有进入该方法。
有任何想法吗?我的初始化程序中是否缺少某些内容?
PersonController.h
#import <Foundation/Foundation.h>
@interface Person : NSObject {
IBOutlet NSTableView *personsTable;
NSMutableArray *personsList;
NSMutableArray *personCollection;
IBOutlet NSTextField *selectedPersonName;
IBOutlet NSTextField *selectedPersonGender;
@private
}
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification;
@end
PersonController.m
#import "PersonController.h"
#import "Person.h"
@implementation PersonController
- (id)init
{
self = [super init];
if (self) {
personsList = [[NSMutableArray alloc] init];
Person *person = [[Person alloc] init];
// Create person 1
person.name = @"Bob";
person.gender = @"male";
// Append to array
[personsList addObject:person];
[person release];
// Create person 2
person = [[Person alloc] init];
person.name = @"Fred";
person.gender = @"Unknown";
// Append to array
[personsList addObject:person];
[person release];
[personsTable reloadData];
}
return self;
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [personsList count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Person *person = [personsList objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
return [person valueForKey:identifier];
}
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
NSInteger selectedRow = [personsTable selectedRow];
if (selectedRow == -1)
{
// these should be localized, but use string constants here for clarity
[selectedPersonName setStringValue:@"No selection"];
[selectedPersonGender setStringValue:@"No selection"];
}
else
{
Person *selectedPerson = [personCollection objectAtIndex:selectedRow];
[selectedPersonName setStringValue:[selectedPerson name]];
[selectedPersonGender setStringValue:[selectedPerson gender]];
}
}
- (void)dealloc
{
[super dealloc];
}
@end
所以这里的问题是我试图使用tableViewSelectionChange
单击 NSTableColumn 中的行时触发事件。由于我无法让这个工作,我采取了另一种方法,即创建一个IBAction
并将其链接到 NSTableView,我发现它工作得很好。
为了做到这一点,我做了以下事情:
- Delete
- (void)tableViewSelectionDidChange
- 创建IBA动作
- 在 XIB 文件中,创建一个
Received Actions
IBAction 和 NSTableView 之间的链接,在 NSTableView 连接检查器中的“发送操作”下有“选择器”操作”将此“选择器”与要触发的 IBAction 连接。
这是PersonController.m中的IBAction
- (IBAction)columnChangeSelected:(id)sender
{
NSInteger selectedRow = [personsTable selectedRow];
if (selectedRow != -1) {
NSLog(@"Do something with selectedRow!");
}
else {
// No row was selected
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)