Bin*_*cks 5 macos cocoa objective-c selection nsoutlineview
在我的小Cocoa应用程序中,我仍然在使用基于视图的NSOutlineView.我正在尝试使用finder之后模拟我的OutlineView.当Finder OutlineView失去焦点(例如,单击右侧的任何文件夹)时,所选行(例如桌面)将保持选中,使用亮蓝色渐变,并且不会更改为不活动的蓝灰色渐变.
我想在我的应用程序中复制此行为.
在一个不基于视图的OutlineView中,我能够继承NSOutlineView并重新实现(void)highlightSelectionInClipRect:(NSRect)clipRect
,这样每个突出显示的行都可以提供明亮的蓝色背景图像.
但是,现在使用基于视图的OutlineView(设置为SourceList样式),这个方法显然甚至都没有被调用.我甚(id)_highlightColorForCell:(NSCell *)cell
至已经实现了返回nil,正如一些网站建议的那样,但这也无济于事.
有关如何在基于视图的OutlineView中设置高光渐变的任何提示?
你在做任何可能搞乱事情的自定义绘图吗?据我所知,所有的选择绘图都是正常处理的,请查看TableViewPlayground示例(默认情况下不是源列表样式,但这是对XIB的简单更改).
但是失败了,根据Mac OS X 10.7 doc条目 highlightSelectionInClipRect:
注意:对于基于视图的表视图,不应对此方法进行子类化或重写.相反,行绘制自定义应该通过继承NSTableRowView来完成.
所以我认为(我还没有尝试过任何这个)就像你想要继承NSTableRowView,覆盖drawSelectionInRect:
(在TableViewPlayground中有一个例子,并绘制你的选择.你可以检查应用程序是否处于活动状态,[NSApp active]
或者可能self.emphasized
像使用属性一样这样的例子.
然后,您将在NSOutlineViewDelegate协议方法中返回一个自定义NSTableRowViews(仅限10.7!): (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
希望这有效/有帮助!
我应该注意TableViewPlayground示例outlineView:viewForTableColumn:item:
默认使用委托方法,并使用NSTableViewCells完成所有操作,但是如果添加rowViewForItem
上面提到的方法,则会调用它.所以我猜你可以用它来为它的每一行返回一个视图.
谢谢,通过你的提示,我能够很容易地解决问题.我继承NSTableRowView
并覆盖-(BOOL) isEmphasized
以始终返回true.
然后-(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
我在我的OutlineViews委托中实现,通过调用返回我的子类的项目特定实例ClbTableRowView *result = [outlineView makeViewWithIdentifier:identifier owner:self];
编辑:除此之外,通过将新的NSView对象放入Interface Builder中的OutlineView,似乎还有一种非常隐蔽的方式来使用自定义NSTableRowView子类.然后根据Apple文档将views类设置为您的子类,并为其提供"NSTableViewRowViewKey"的用户界面项标识符.
归档时间: |
|
查看次数: |
3632 次 |
最近记录: |