- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个 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 中设置的大小。
谁能告诉我为什么?
编辑
这个问题我也解决了。这是自动布局,这弄乱了动画。现在,唯一剩下的就是背景 alpha,它应该改变。我可以重画整个东西,但是还有另一种解决方案,我可以只修改背景和取消按钮的 Alpha 吗?
最佳答案
我想做类似的事情。 ITSearchField 非常可靠且漂亮。然而,一旦获得关注,我希望扩大搜索范围。人们可能很快就会发现 NSSearchfield 由许多组件和层组成。
这是我为让它发挥作用而写的内容......注意:它适用于 10.7 或更高版本。此外,您还必须将 IB 中搜索字段控件宽度的布局约束连接到 socket 。
.h
@interface MySearchField : NSSearchField
@end
.m
#pragma mark - Implementation: Search Field Control
@interface MySearchField()
@property (readwrite, nonatomic, getter=isExpanded) BOOL expand;
@property (readwrite, nonatomic, getter=hasFocusRing) BOOL focusRing;
@property (readwrite, strong, nonatomic) NSTimer *expandTimer;
@property (readwrite, strong, nonatomic) IBOutlet NSLayoutConstraint *widthConstraint;
@property (readwrite, nonatomic) CGFloat searchWidth;
@end
static NSTimeInterval const kSearchFieldTime = 0.5;
@implementation MySearchField
@synthesize expand, focusRing;
@synthesize expandTimer, searchWidth;
@synthesize widthConstraint;
#pragma mark Timer Methods:
- (void) resizeSearchField {
if ( self.hasFocusRing ) {
if ( !self.isExpanded ) {
self.searchWidth = self.widthConstraint.constant;
[[self.widthConstraint animator] setConstant:(self.searchWidth * 2)];
self.expand = YES;
} } else {
if ( (self.isExpanded) &&
((!self.stringValue) || ([self.stringValue isEqualToString:@""])) ) {
[[self.widthConstraint animator] setConstant:self.searchWidth];
self.expand = NO;
} }
}
- (void) stopTimer {
if ( self.expandTimer )
[self.expandTimer invalidate];
self.expandTimer = nil;
}
- (void) startTimer {
[self stopTimer];
SEL resizeSelector = @selector(resizeSearchField);
NSMethodSignature *expandSignature = [MySearchField instanceMethodSignatureForSelector:resizeSelector];
NSInvocation *expandInvocation = [NSInvocation invocationWithMethodSignature:expandSignature];
[expandInvocation setSelector:resizeSelector];
[expandInvocation setTarget:self];
self.expandTimer = [NSTimer scheduledTimerWithTimeInterval:kSearchFieldTime invocation:expandInvocation repeats:NO];
}
#pragma mark Override Methods:
- (void) noteFocusRingMaskChanged {
self.focusRing = !NSEqualRects(NSZeroRect, self.focusRingMaskBounds);
[self startTimer];
[super noteFocusRingMaskChanged];
}
@end
好吧,确实是这样。当对焦环发生变化时您会收到通知并启动快速计时器方法。当您单击搜索字段的取消按钮重置控件时,计时器是必需的。计时器所做的唯一事情就是触发 resizeSearchField 方法。
更新:哦,是的,不要忘记将 IB 中的搜索字段控件的类设置为 MySearchField 或任何您想要的名称。
享受吧!
关于objective-c - NSSearchField 中的可点击搜索图标和褪色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13797685/
我对 jQuery 还很陌生,但我正在寻找一个简单的脚本,通过淡入和淡出的方式在标题中循环 3 或 4 个背景图像。它们是透明的 png,因此我尝试过的许多 slider 都不起作用。 有什么想法吗?
我需要一个用 Java 编写的颜色褪色示例。我的要求是我有两个矩形。一个填充红色,另一个填充白色。当我点击任何按钮时,我希望红色开始褪色并移动绿色。一旦到达绿色位置,另一个矩形就会自动从黄蓝色开始。有
尝试设置 UIAlertController backgroundColor 但结果是“褪色”颜色 let alert = UIAlertController(title: "some title",
我正在尝试制作一个带有渐变 block 动画的 slider ,就像 here .问题是,在我的例子中,我试图全屏显示,这意味着高度和宽度将是可变的。这意味着背景位置技巧将不起作用,因为它不会调整背景
这是我想要的东西achieve . 类似于 this 的东西*但这会通过使用颜色而褪色。 Long wordingggggggggggggggggggggggggggggggggggg
我用 glColor3f() 和 GL_QUAD_STRIP 绘制了 2 个相邻的方 block ,但它们似乎在 2 个方 block 之间褪色,有什么办法可以防止这种情况发生吗?或者 GL_QUAD
我正在开发一个用户脚本,该脚本将缺失的功能添加到我无法控制的第 3 方网站。 它将根据页面和一些 webAPI 调用的结果计算 URL。这些 URL 将添加到页面的 HTML 中。 然后对于呈现为 :
我只是想在页面上有一个特定的部分来交换内容(比如 3 个不同的元素),并具有淡入淡出的效果。所以我想我可以为内容部分定义我的容器属性,然后我可以定义将换入和换出的 3 个 div 容器中的每一个。因此
我在 bootstrap carousel 上苦苦挣扎了几天,它应该像默认的那样向左/向右滑动,但增加了淡化(新元素进入时慢慢获得不透明度,而前一个元素在移出时慢慢失去不透明度),我尝试了很多变体,但
我对 Qt 的样式表功能有一些疑问。这真的很棒,但感觉这个功能还没有出现太久,真的吗?这是迄今为止最简单的方式来设置我的 GUI 样式。 是否可以在样式表中添加褪色?每当鼠标悬停在某个小部件上时,我不
我正在使用以下命令 ffmpeg -i ~/Desktop/input.mp4 -filter_complex "color=black:100x100[c];\ [c][0]scale2r
我正在尝试实现一个“返回顶部”链接,该链接会在用户向下滚动页面一定量后淡入我的页面。 我注意到在我的某些页面上,“返回顶部”链接会在页面上闪烁,然后再自行隐藏,但在其他页面上则不会。为了找出“链接闪烁
我想将 svg 文件加载到一个 div(或其他)中,我什至可以成功地做到这一点 here : var div_svg = d3.select("div#example"); svg1 = "https
我是一名优秀的程序员,十分优秀!