首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取NSPopUpButton选定对象?

如何获取NSPopUpButton选定对象?
EN

Stack Overflow用户
提问于 2012-08-22 22:19:45
回答 3查看 9K关注 0票数 8

我在上一堂学生课:

代码语言:javascript
复制
@interface student : NSObject{    
    NSString *name;
    NSDate *date;
}

我有一个学生列表的NSMutableArray,我将它绑定到一个NSPopUpButton上,如下所示

content : studentArray,arrangedObjects内容值: studentArray,arrangedObjects,name

现在我可以像这样获取学生对象:

代码语言:javascript
复制
-(IBAction)studentPopupItemSelected:(id)sender
{ 
    NSPopUpButton *btn = (NSPopUpButton*)sender;

    int index = [btn indexOfSelectedItem];  
    student *std = [studentArray objectAtIndex:index];

    NSLog(@"%@ => %@", [std name], [std date]);
}

有什么方法可以直接从NSPopUpButton获取学生对象吗?像这样:

代码语言:javascript
复制
NSPopUpButton *btn = (NSPopUpButton*)sender;
student *std = (student *)[btn objectValueOfSelectedItem];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-23 00:08:24

你做这件事的方式很好。还有另一种方法,但不一定更好。

基本上,弹出按钮包含一个菜单,并且在菜单中有菜单项。

在菜单项上有一个名为representedObject的属性,您可以使用它来创建与学生的关联。

因此,您可以通过创建菜单项并将其添加到菜单中来手动构建弹出按钮。

票数 7
EN

Stack Overflow用户

发布于 2012-08-22 23:52:13

我相信你的做法是最好的。由于NSPopUpButton是由您的数组填充的,因此它实际上并不包含对象,它只知道它在哪里。就个人而言,我会使用

代码语言:javascript
复制
-(IBAction)studentPopupItemSelected:(id)sender {
     student *std = [studentArray objectAtIndex:[sender indexOfSelectedItem]];
     NSLog(@"%@ => %@", [std name], [std date]);
}

看过NSPopUpButton上的文档后,我确信这是获取对象的最有效的方法。

票数 3
EN

Stack Overflow用户

发布于 2012-12-16 05:51:28

我通过使用"NSMenuDidSendActionNotification“解决了这个问题,一旦用户在NSMenu的NSPopUpButton中选择了合适的NSMenuItem,就会发送这个has。

您可以注册观察者,例如"awakeFromNib“,如下所示

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(popUpSelectionChanged:)
                                             name:NSMenuDidSendActionNotification
                                           object:[[self myPopUpButton] menu]];

如果你有多个NSPopUpButtons,你可以为每一个注册一个观察者。不要忘记在dealloc中删除观察者:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] removeObserver: self];

在popUpSelectionChanged中,您可以检查标题,这样您就可以知道是哪个菜单实际发送了通知。可以在属性检查器的界面生成器中设置标题。

代码语言:javascript
复制
- (void)popUpSelectionChanged:(NSNotification *)notification {    
    NSDictionary *info = [notification userInfo];
    if ([[[[info objectForKey:@"MenuItem"] menu] title] isEqualToString:@"<title of menu of myPopUpButton>"]) {
        // do useful things ...
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12075195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档