Я хотел бы сделать NSSearchField, как в Ecoute 3.0. Значок поиска в поле поиска должен быть интерактивным, разворачиваться и сворачиваться при нажатии на него.
Как вы можете достичь этого? Я искал документацию, но не нашел ничего полезного. Я мог бы реализовать расширение с прокси-сервером аниматора, так что это ясно.
Другое дело, что фон появляется/исчезает по мере его расширения/схлопывания. Как я могу этого добиться?
Буду благодарен за любые советы, пример кода и т.д.
ИЗМЕНИТЬ
Хорошо, я нашел первую часть сам.
- (void) resetSearchButtonCell {
NSButtonCell *c= [[NSButtonCell alloc] init];
[c setButtonType:NSMomentaryChangeButton]; // configure the button
[c setBezelStyle:NSRegularSquareBezelStyle]; // configure the button
[c setBordered:NO];
[c setBezeled:NO];
[c setEditable:NO];
[c setImagePosition:NSImageOnly];
[c setImage:[NSImage imageNamed:@"search"]];
[c setAlternateImage:[NSImage imageNamed:@"search-pushed"]];
[c setTarget:self];
[c setAction:@selector(_search:)];
[self setSearchButtonCell:c];
}
Теперь я создал свойство isCollapsed
, которое я переключаю в _search:
. И в методе установки setIsCollapsed:
я делаю следующее:
NSRect newRect = self.frame;
if (_isCollapsed) {
newRect.size.width = kCollapsedWidth;
} else {
newRect.size.width = kEXpandedWidth;
}
[[self animator] setFrameSize:newRect.size];
Но по какой-то причине кадр сбрасывается до исходного размера, установленного в Interface Builder, когда NSSearchField получает или теряет фокус.
Кто-нибудь может сказать мне, почему?
ИЗМЕНИТЬ
Я тоже решил эту проблему. Это был автоматический макет, который испортил анимацию. Теперь единственное, что осталось, это background-alpha, который должен измениться. Я мог бы перерисовать все это, но есть ли другое решение, в котором я мог бы просто изменить альфу только фона и кнопки отмены?