0

我试图仅在按下(并按住)按钮时激活我的一段代码。当按钮被释放时,我希望我的标签再次不可见。有没有办法有效地做到这一点?我有一个 IBAction(按钮)和一个 IBOutlet(一个文本字段),并为操作设置了以下代码:

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

有什么帮助吗?(用假人的话)

扎克

4

2 回答 2

2

恐怕在 Mac 上的 IB 中无法做到这一点,因为在 iOS 上是可能的:

UIKit 和 AppKit——尽管在许多方面相似——是两个截然不同的野兽。AppKit 的传统可以追溯到 1990 年代(甚至可能是 1980 年代后期),这在一些地方(我在看着你,NSCell)表现出来,而 UIKit 的设计有着大约 20 年的经验应用程序套件。

虽然你可以很容易地告诉一个UIControl它的动作何时被调用(并且可以对不同的事件有不同的动作),但NSControl只允许你指定一个要发送的动作。

如果您不想覆盖-[NSButtonCell stopTracking:at:inView:mouseIsUp:]or-[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 是逐渐发生的并且可以在中途更新,这只会在不再触发动作时影响图层的可见性——即不再按下按钮。

于 2011-03-03T10:58:52.920 回答
0

您可以使用UIControlEventTouchDown隐藏您的标签,然后在 UIControlEventTouchUpInside事件中显示它。

-(IBAction)buttonHit {
    [myDescription setHidden:NO];
}

-(IBAction)buttonReleased {
    [myDescription setHidden:YES];
}
于 2011-03-03T04:53:41.213 回答