从NSMenuItem获取NSPopUpButton

时间:2010-01-31 23:14:35

标签: cocoa nsmenuitem nspopupbutton

我的应用程序使用-validateMenuItem:方法验证菜单项。 但是我需要验证不同的菜单项,具体取决于弹出窗口的内容。

我希望有办法获得弹出窗口的标签,但在查看文档后,我似乎无法找到方法......任何想法?

修改 我认为这需要更多的上下文...我的模型对象是一个JDBCSyncer(同一个数据库与另一个数据库同步),我的窗口是一个设置,我需要验证我的菜单项基于他们的标题在一个字符串数组中表示表中的各个字段。我们的想法是从弹出窗口中选择字段。

2 个答案:

答案 0 :(得分:3)

我的头脑中没有一个很好的答案,但这些方面的内容如何:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
{
    NSMenu *menu = [menuItem menu];
    if (menu == [popUpButton1 menu]) {
        return YES;
    }
    else if (menu == [popUpButton2 menu]) {
        return NO;
    }
    else (menu == [popUpButton3 menu]) {
        return YES;
    }
    else {
        return NO;
    }
}

答案 1 :(得分:0)

如果这些弹出按钮中的菜单项非常不相关,您需要将一个弹出按钮与另一个弹出按钮区分开来,也许您应该为它们创建单独的控制器对象。每个控制器都是其弹出按钮菜单项的目标(以及验证器),而那些/那些弹出按钮。

如果对相关项目有意义,部分或全部这些控制器也可以提供表格视图或集合视图。

这也允许您标记菜单项以便于识别,而不必担心标记冲突(在两个或多个不相关的UI元素中使用相同的标记),因为每个控制器只会看到它知道的标记。类似地,如果控制器使用表示的对象(如果它动态填充其弹出按钮,则最有可能),它不必担心看到它无法识别的表示对象。