激活按钮上的代码按住此按钮

时间:2011-03-03 04:50:33

标签: objective-c xcode macos interface-builder ibaction

我只是在按下(并按住)按钮时尝试激活我的代码部分。释放按钮后,我希望我的标签再次不可见。有没有办法有效地做到这一点?我有一个IBAction(按钮)和一个IBOutlet(一个文本字段),这个代码设置为动作:

- (IBAction)toggleIt:(id)sender {
    if ([myDescription isHidden]) {
        [myDescription setHidden:NO];
    } else {
        [myDescription setHidden:YES];
    }
}

有任何帮助吗? (用假人术语)

扎克

2 个答案:

答案 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];
}