objective-c – 如何从NSTableView中选择行来创建动作

objective-c – 如何从NSTableView中选择行来创建动作,第1张

概述当我从NSTableView中选择一行时,它不会从tableViewSelectionDidChange方法运行代码.我在这种方法中提出了断点,甚至没有进入该方法. 有任何想法吗?我在我的初始化器中缺少某些东西吗? PersonController.h #import <Foundation/Foundation.h>@interface Person : NSObject { IBOut 当我从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
解决方法 所以这里的问题是,当单击NStableColumn中的一行时,我试图使用tableVIEwSelectionChange来触发事件.因为我无法得到这个工作,我采取了另一种方法是创建一个IBAction并将其链接到NStableVIEw,我已经发现这个工作很好.

为了做到这一点,我做了以下工作:

>删除 – (voID)tableVIEwSelectionDIDChange
>创建IBAction
>在XIB文件中,在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    }}
总结

以上是内存溢出为你收集整理的objective-c – 如何从NSTableView中选择行来创建动作全部内容,希望文章能够帮你解决objective-c – 如何从NSTableView中选择行来创建动作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1029071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存