在许多应用程序的 View→Sort by 菜单中看到的几种NSMenuItem状态的最佳关联方式是什么,这样它们是互斥的?这里以Mail的截图为例:
我在文档中找到了以下段落,但我不确定如何实现这个:
您可以使用状态来实现一组互斥菜单 物品,很像一组单选按钮。例如,游戏可以 有三个菜单项来显示游戏的级别:初学者, 中级和高级。要实现这样的组,请创建一个 他们都使用的动作消息。此操作消息更改 适当的设置,然后通过取消选中来反映该更改 当前已检查项目并检查新选择的项目。
答案 0 :(得分:3)
区分发件人的常用方法是在IB中为每个标记分配一个唯一标记。然后使用[sender tag]
在操作方法中获取该标记。
要查找正在切换的状态的旧已检查项目,可以使用[[sender menu] itemWithTag:tagForOldState]
。但是,如果在多个菜单(例如主菜单和上下文菜单)中反映相同状态的任何可能性,则应考虑在实现操作方法的同一类中实现-validateMenuItem:
。在该方法中,您可以检查项目-action
和-tag
,以决定是否应根据当前的计划状态进行检查。然后,调用-setState:
以应用适当的状态。
例如:
- (BOOL) validateMenuItem:(NSMenuItem*)menuItem
{
if ([menuItem action] == @selector(sortBy:))
[menuItem setState:([menuItem tag] == currentSortOrderTag) ? NSOnState : NSOffState];
return YES;
}