带有自定义视图的NSToolbar

时间:2014-09-29 02:30:02

标签: objective-c cocoa

嗨,所以我遇到了一个问题,我无法弄清楚原因是什么。到目前为止,我创建了一个具有NSToolbar的应用程序,其中包含自定义视图,以便您可以在工具栏上切换视图(就像safari的首选项窗口工具栏视图一样)。我在youtube上使用了CCodings教程但我有自己移动视图的问题,例如我点击视图1当我点击视图2时查看一个更改并且视图向上移动以便您只能看到一半时间我提出看法,我使用的是Xcode 6和OS X 10.10,所以我不知道这是否是一个原因但我提前感谢你,如果你可以帮助我,那么主要是MainWindowController.m文件:

还应正确设置视图

-(NSRect)newFrameForNewContentView:(NSView*)view {
    NSWindow *window = [self window];
    NSRect newFrameRect = [window frameRectForContentRect:[view frame]];
    NSRect oldFrameRect = [window frame];
    NSSize newSize = newFrameRect.size;
    NSSize oldSize = oldFrameRect.size;

    NSRect frame = [window frame];
    frame.size = newSize;
    frame.origin.y -= (newSize.height - oldSize.height);

    return frame;

}

-(NSView *)viewForTag:(int)tag {

    NSView *view = nil;
    switch (tag) {
    case 0:
    view = smallView;
    break;
    case 1:
    view = mediumView;
    break;
    case 2: default:
    view = largeView;
    break;

    }

    return view;

}

- (BOOL)validateToolbarItem:(NSToolbarItem *)item {

    if ([item tag] == currentViewTag) return NO;
    else return YES;
}

-(void)awakeFromNib {

    [[self window] setContentSize:[smallView frame].size];
    [[[self window] contentView] addSubview:smallView];
    [[[self window] contentView] setWantsLayer:YES];

}

-(IBAction)switchView:(id)sender {
    int tag = [sender tag];
    NSView *view = [self viewForTag:tag];
    NSView *previousView = [self viewForTag:currentViewTag];
    currentViewTag = tag;

    NSRect newFrame = [self newFrameForNewContentView:view];

    [NSAnimationContext beginGrouping];

    if ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask)
    [[NSAnimationContext currentContext] setDuration:1.0];

    [[[[self window] contentView] animator] replaceSubview:previousView with:view];
    [[[self window] animator] setFrame:newFrame display:YES];

    [NSAnimationContext endGrouping];


}

1 个答案:

答案 0 :(得分:0)

似乎您还需要更改NSWindow框架,而不是contenView。 另外,对于我通过点击事件切换视图,最好使用NSTableView。