0

ボタンを押した(そして押したままにした)ときにのみ、コードのセクションをアクティブ化しようとしています。ボタンを離すと、ラベルが再び表示されなくなります。これを効果的に行う方法はありますか?IBAction(ボタン)とIBOutlet(テキストフィールド)があり、次のコードがアクションに設定されています。

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

何か助けはありますか?(ダミー用語で)

ザック

4

2 に答える 2

2

iOSで可能であるように、MacのIBでこれを行う方法はないのではないかと思います。

UIKitとAppKitは、多くの点で似ていますが、2つの非常に異なる獣です。AppKitには1990年代(おそらく1980年代後半)にまでさかのぼる遺産があり、いくつかの場所で透けて見えます(私はあなたを見ています、NSCell)、UIKitは約20年の経験に基づいて設計されましたAppKit。

また、アクションがいつ呼び出されるかを簡単に知ることができますがUIControl(イベントごとに異なるアクションを設定NSControlできます)、送信する1つのアクションを指定するだけで済みます。

またはとをオーバーライドしたくない場合-[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の「非表示」プロパティはアニメーション化可能であるため、変更すると暗黙的なアニメーションが発生します。0x0Objective Cは単なるCであるため、解釈されないものはすべて、3行目が当たる場所になります。このアクションが戻った直後に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 に答える