我只是在按下(并按住)按钮时尝试激活我的代码部分。释放按钮后,我希望我的标签再次不可见。有没有办法有效地做到这一点?我有一个IBAction(按钮)和一个IBOutlet(一个文本字段),这个代码设置为动作:
- (IBAction)toggleIt:(id)sender {
if ([myDescription isHidden]) {
[myDescription setHidden:NO];
} else {
[myDescription setHidden:YES];
}
}
有任何帮助吗? (用假人术语)
扎克
答案 0 :(得分:2)
我担心在Mac上的IB中无法做到这一点,因为它可以在iOS上实现:
UIKit和AppKit - 虽然在许多方面相似 - 是两种非常不同的野兽。 AppKit的传承可以追溯到20世纪90年代(甚至可能是20世纪80年代后期),这些传统在几个地方展示(我看着你,NSCell),UIKit的设计经历了大约20年的经验。了AppKit。
虽然您可以轻松地告诉UIControl
何时要调用其操作(并且可以针对不同的事件执行不同的操作),NSControl
仅允许您指定要发送的单个操作
如果您不想覆盖-[NSButtonCell stopTracking:at:inView:mouseIsUp:]
或-[NSButton mouseDown:]
和-[NSButton mouseUp:]
,最简单的方法就是设置按钮以持续发送其动作。这可以是IB中的骨骼(在“控制”类别下的“属性”检查器中)。
接下来的事情是让你的描述支持图层,并以这样的方式重写你的动作方法:
- (IBAction)toggleIt:(id)sender {
CALayer *descriptionLayer = [myDescription layer];
[descriptionLayer setHidden:NO]; // (ab-)use implicit animation
[descriptionlayer performSelector:@selector(setHidden:) withObject:@"" afterDelay:.1];
}
工作原理:
CALayer的“隐藏”属性具有动画效果,因此更改它将导致隐式动画。由于Objective C只是C,任何不是0x0
的东西都被解释为YES
,这就是第三行出现的地方:空字符串显然不是0x0
所以在这个动作之后不久返回后,将调用图层隐藏。但由于CATransitions逐渐发生并且可以在中途更新,这只会影响不再触发动作时图层的可见性 - 即不再按下按钮。
答案 1 :(得分:0)
您可以使用UIControlEventTouchDown
隐藏标签,然后在UIControlEventTouchUpInside
事件中显示。
-(IBAction)buttonHit {
[myDescription setHidden:NO];
}
-(IBAction)buttonReleased {
[myDescription setHidden:YES];
}