【问题标题】:Activating Code on Button Press and hold ONLY激活按钮上的代码 仅按住
【发布时间】:2011-03-03 18:58:52
【问题描述】:

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

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

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

扎克

【问题讨论】:

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


    【解决方案1】:

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

    UIKit 和 AppKit——尽管在许多方面相似——是两个截然不同的野兽。 AppKit 的传统可以追溯到 1990 年代(甚至可能是 1980 年代后期),这在一些地方(我在看着你,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 是逐渐发生的并且可以在中途更新,这只会在不再触发操作时影响图层的可见性 - 即不再按下按钮。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 有没有办法在没有计时器的情况下做到这一点?我不明白为什么要延迟我的代码-当按钮关闭时,隐藏文本字段。释放后,再次显示。看起来很简单,不需要计时器?
      • @Zakman411:我想我误读了你原来的问题。我已经更新了我的回复。
      • 我明白了 - 我将如何在 Interface Builder 中实现 buttonHit 和 buttonReleased?我看不到要拖到每个 IBAction 的内容吗?
      • @Zakman411 你不能。不幸的是,FAIB 所描述的仅适用于 iOS。也许 Lion 会纠正这种情况,但在那之前,您需要继承 NSButton(Cell)? 或调用一些hackery。
      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2021-07-30
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多