0

我想删除NSOutlineView的显示/隐藏按钮。所以,我覆盖NSOutlineView并获取mouseDown事件。以下是代码。

    -(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"LeftFolderListOutlineView mouseDown");
    [super mouseDown:theEvent];

    NSPoint localPoint = [self convertPoint:theEvent.locationInWindow
                                   fromView:nil];
    NSInteger row = [self rowAtPoint:localPoint];

    id clickedItem = [self itemAtRow:row];

    if (![clickedItem isKindOfClass:[NSDictionary class]]) {
        return;
    }


    if ([self isItemExpanded:clickedItem]) {

        [[self animator] collapseItem:clickedItem];

    }else{
        [[self animator] expandItem:clickedItem];
    }

}

当 NSOutlineView 折叠或展开时,它应该是一个滚动动画。但在这种情况下它不起作用。有人告诉我为什么以及如何改进它?

4

1 回答 1

0

要删除“显示/隐藏按钮”(大纲单元格),您可以- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row在 NSOutliveView 子类中实现方法并返回 NSZeroRect。

NSOutlineView 折叠/展开动画不能通过animator.

只有 OS 10.7 或更高版本提供折叠/展开动画效果。因此,如果您计划支持较旧的操作系统版本,则需要提供单独的实现。

如果你想在 OS 10.6 或更低版本上提供折叠/展开动画,你肯定需要重写 NSOutlineView 的“drawRect”。

- 更新 -

对不起,我想我忽略了重点。10.7 展开/折叠动画仅在用户单击大纲单元格时自动启动。如果我们想在没有默认轮廓单元格的情况下显示动画,我认为除了手动实现动画效果别无他法。

我制作了一个示例项目,通过图像绘制实现展开/折叠动画效果。在这里查看源代码:https ://github.com/roh0sun/ovanimation

于 2013-05-13T07:58:22.680 回答