У меня есть один файл MainMenu.xib, и у меня есть окно под названием «Предпочтения» Также у меня есть четыре разных пользовательских вида с разными высотами. и панель инструментов в этом окне. Я связал каждый элемент панели инструментов с - (void) switchViews: (id) отправитель; функция. Представления связаны и отображаются, но также меняются, но проблема в том, что если я перехожу из одного представления в другое, а затем обратно или в другое, содержимое, т.е. кнопки, метки, флажки в представлениях, перемещаются вверх, окно все еще продолжает меняться на правую высоту, но если я переключусь достаточно быстро, содержимое исчезнет из представления. Любая помощь будет полезна.Переключение между пользовательскими представлениями с помощью панели инструментов
http://imgur.com/bV3NHa0,zgJCacA http://imgur.com/bV3NHa0,zgJCacA#1
// FOR CHANGING VIEWS IN THE PREFERENCES WINDOW
- (IBAction)switchView:(id)sender {
long 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 preferences] contentView] animator] replaceSubview:previousView with:view];
[[[self preferences] animator] setFrame:newFrame display:YES];
[NSAnimationContext endGrouping];
}
- (NSView *)viewForTag:(long int)tag {
NSView *view = nil;
switch (tag) {
case 0:
view = generalView;
break;
case 1:
view = timesView;
break;
case 2:
view = menubarView;
break;
case 3: default: view = aboutView;
break;
}
return view;
}
- (NSRect)newFrameForNewContentView:(NSView *)view {
NSWindow *window = [self preferences];
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;
}