NSToolbar自定义面板未显示默认图片问题咨询
关于NSToolbar自定义面板中隐藏工具图标不显示的问题
我开发的应用会调用runCustomizationPalette接口。将工具添加至NSToolbar后,设置其中一个工具默认不显示,且工具栏配置为同时显示图标与文本。运行应用时一切符合预期——被隐藏的工具不会显示,但调用自定义面板后,该工具仅以“仅文本”形式呈现,无图片展示。若取消默认隐藏设置,让所有工具都显示在工具栏中,自定义面板则能正常展示所有内容。请问是什么控制着Customization Palette中的图片显示?
附工具栏创建代码:
NSToolbar* tb = [[wxNSToolbar alloc] initWithIdentifier:cfidentifier.AsNSString()]; [tb setAllowsUserCustomization:YES]; [tb setAutosavesConfiguration:YES]; NSToolbarDisplayMode mode = NSToolbarDisplayModeDefault; NSToolbarSizeMode displaySize = NSToolbarSizeModeSmall; if ( style & NOICONS ) mode = NSToolbarDisplayModeLabelOnly; else if ( style & TEXT ) mode = NSToolbarDisplayModeIconAndLabel; else mode = NSToolbarDisplayModeIconOnly; [tb setDisplayMode:mode]; [tb setSizeMode:displaySize];
问题原因及解决方法
问题出在默认隐藏的工具没有正确关联图标资源,NSToolbar初始化时不会为未显示的工具自动预加载图标。Customization Palette的图标显示完全依赖对应NSToolbarItem自身的image属性,和工具栏的全局显示模式无关。
需要检查并修正以下几点:
- 确保所有
NSToolbarItem(包括默认隐藏的)在创建时就明确设置了image属性,不管工具是否会被插入到工具栏中。 - 若使用
NSToolbarDelegate的toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:方法返回工具条项,要保证即使工具是默认隐藏状态,返回的实例也带有有效图标,不要仅在工具被插入时才赋值。 - 如果你自定义了
NSToolbarItem子类,检查是否重写了image属性导致图标无法正常返回。
默认隐藏的工具因为从未被插入到工具栏,系统不会自动触发图标加载逻辑,所以必须在创建阶段就把图标配置到位,自定义面板才能正确渲染出图标。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

