6

我想模仿 Finder 的谓词列表。尤其是带有“其他”(德语:“Andere ...”)菜单条目的 LeftExpressions 弹出窗口,并且喜欢弹出带有用户可选择的搜索谓词列表的 NSSheet。

我的方法是创建一些 NSPredicateEditorRowTemplates 和最后一个自定义 rowTemplate,其 leftExpression 名为“other...”。

然后我重写了 templateViews 方法并添加了一个 separatorItem:

-(NSArray *)templateViews{
 NSMutableArray * views = [[super templateViews] mutableCopy];

// I tried already to add here my custom menu entry, but if I add more templates my custom entry (and the separator line) is not fixed at the last index.
if (!isCustomMenuItemAdded) {

NSPopUpButton *leftButton = views[0];

    // Add a menu separator
[[leftButton menu]insertItem:[NSMenuItem separatorItem] atIndex:[leftButton menu].itemArray.count-1];   
}
return views;
}

我的自定义 predicateEditor 现在显示正确,但是如果我点击最后一个菜单项“Other..”,虚拟 NSPredicateRowTemplate 就会出现。

我试图覆盖我的 rowTemplate 类中的 -(id)copy 方法来抑制新行,但这对我来说感觉很奇怪。

-(id)copy{
  return nil;  // OK, now there is no new row, but this throws an internal exception
}

我的问题是:有没有更好的方法在左侧表达式 popupButton 中添加自定义菜单项?以及如何抑制 PredicateEditor 中显示新的 predicateTemplateRow?

4

0 回答 0