我想做一个 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:
setter 方法中,我执行以下操作:
NSRect newRect = self.frame;
if (_isCollapsed) {
newRect.size.width = kCollapsedWidth;
} else {
newRect.size.width = kEXpandedWidth;
}
[[self animator] setFrameSize:newRect.size];
但是由于某种原因,当 NSSearchField 获得或失去焦点时,框架被重置为初始大小,即在 Interface Builder 中设置的大小。
谁能告诉我为什么?
编辑
我也解决了这个问题。这是自动布局,弄乱了动画。现在,唯一剩下的就是 background-alpha,它应该会改变。我可以重绘整个东西,但是是否有另一种解决方案,我可以只修改背景的 alpha 和取消按钮?