2013-06-23 4 views
0

У меня есть один файл 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; 
} 

ответ

0

с проблемой вы описываете и скользящим на ваш код я хотел бы начать подозревать эту линию ...

frame.origin.y -= (newSize.height - oldSize.height); 
Смежные вопросы