Я неопытный пользователь, пытающийся учиться с помощью простого процесса создания проектов ... Я прошу вашей помощи, поскольку уже два дня не могу найти работающее решение, копая Справку Xcode и Google .
У меня есть простое приложение MacOS X (10.6.x), которое создает (в коде) дополнительный NSMenuItem в меню строки состояния XIB. На моем AppDelegate я создаю объект, который загружает NSView (из MainMenu.xib):
// Add menu entry for NSView object
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"Placeholder"
action:nil
keyEquivalent:@""];
[newItem setView:theView];
[newItem setEnabled:NO];
[newItem setTarget:self];
[calendarMenu insertItem: newItem atIndex:0];
[newItem release];
В моем MainMenu.xib, кроме структуры меню, у меня есть еще один объект, установленный как NSView и под ним, NSTextField (занимающий все пространство представления). Кажется, меню загружает окно просмотра.
Позже я установил некоторую строку в NSTextField, но не могу соответствующим образом отрегулировать высоту; это либо слишком много, либо урожай:
// Crop last newline character
NSString *menuCelebrations = [NSString stringWithString:
[celebName substringToIndex:([celebName length] - 1)]];
NSFont *msgFont = [NSFont menuBarFontOfSize:12.0];
// Set attributes
[theTextField setFont:msgFont];
[theTextField setStringValue:menuCelebrations];
В верхнем меню теперь отображается более длинный текст, который я хочу, обернуть и т. Д., Но я не могу правильно отрегулировать высоту, например:
theView setFrame: NSMakeRect([theView frame].origin.x,
[theView frame].origin.y,
calendarMenu.size.width,
newHeightFloat)];
Как новичок, я пробовал подобные вещи для автоматического изменения размера, но безрезультатно:
[theTextField sizeToFit];
[theTextField autoresizesSubviews];
[theView setAutoresizingMask:NSViewHeightSizable];
[theView setNeedsDisplay:YES];
Само собой разумеется, что я пробовал многочисленные комбинации атрибутов в Интерфейсном Разработчике (где текстовое поле изменяется с представлением и т. Д.). Ничего не помогло ... Я до сих пор не могу найти способ вычислить и установить высоту для NSView или NSTextFieled, который является подобъектом.
Я нашел идеи и код здесь на www.stackoverflow.com и www.cocoabuilder.com , но люди упоминают об использовании NSLayoutManager, NSTextStorage и NSTextContainer, которые Apple предлагает где-то в документация (см. главу / справку «Расчет высоты текста», в которой есть некоторый код, но она не может быть реализована); другие предполагают, что Apple рассчитывает блок, но при рендеринге этого блока пропускаются некоторые пиксели внизу.
A ссылка на работу Мэтта Нойбурга (вместо NSLayout, которую предлагает Apple), которая делает правильный расчет (с примером проекта), кажется, работает хорошо, но на объектах NSTextView ...
Должен ли я создать отдельный / пользовательский класс для этого NSView? Должен ли я предпочесть NSTextView NSTextField?
Кому-нибудь удалось отрегулировать высоту (только) до нужного размера? Я, безусловно, был бы признателен за помощь с примером кода.
Я копаю слишком глубоко, не понимая методов на месте?