[objective-c]在按钮按下并保持只激活代码

标签: Xcode Objective-C
发布时间: 2017/3/27 3:09:29
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想激活我的代码在只有一个按钮按下 (并保持) 的一段。当按钮被释放出来时,我想我要再看不见的标签。 有没有办法有效地做到这一点吗?我有 (按钮)、 IBAction 和 IBOutlet (textfield),这段代码设置的操作︰

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

任何帮助吗?(在假人条款)

扎克

解决方法 1:

我恐怕就没有办法做这在 IB 在 Mac 上的,它将会在 iOS 上可能的结果︰

UIKit 和 AppKit — — 尽管在很多方面相似 — — 是两个非常不同的野兽。AppKit 有追溯到遗产入井到上世纪 90 年代 (也许甚至 80 年代) 在几个点 (我看着你,NSCell),显示通过 UIKit 设计了一些在 AppKit 的 20 年的经验。

虽然你可以容易地辨别 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 等更改它将导致隐式的动画。由于目标 C 只不过是 C,任何东西,不是 0x0 被解释为 YES ,这就是第三行在那里罢工︰ 空字符串显然不是 0x0 所以不久此操作返回后,该图层将被隐藏。但因为 CATransitions 逐渐发生了,可以更新的中途,这只会影响该图层的可见性,行动不再触发时 — — 即不再按下按钮。

赞助商