2012-02-07 8 views
6

私はNSTextFieldラベルを持っています。ユーザーがクリックすると何か起こりたいです。NSTextFieldラベルをクリックして、フォルダへのハイパーリンクをエミュレートします。

私はIBActionを作成してこれをラベルにリンクできたとは思っても、何も起こっていないようです。

提案がありますか?

インテンションズ:

私は、フォルダへのハイパーリンクであるラベルをしたいので、私はこれをやっている理由です。おそらく私は間違ったアプローチを取っていますか? XIBファイルで私のPersonController.m

- (IBAction)surnameLabelSelected:(id)sender { 
    NSLog(@"This should do something!"); 
} 

XIBファイル

IBAction定義は、私がsurnameLabelSelectedStaticText NSTextFieldラベル間Received Actionsの接続を行っています。

答えて

11

ラベルは編集できないテキストフィールドなので、ターゲットにアクションを送信しません。 NSButtonを使用して境界線の描画をオフにし、ラベルをシミュレートするために可能な限りテキストに合わせてサイズを変更したいとします。

+0

良い提案!最終的には、ハイパーリンクフィールドを作成しようとしており、ラベルのスタイルをハイパーリンクのように変更できると考えました。あなたの提案は依然として適切な行動の流れですか? – Coderama

+1

残念ながら、テキストフィールドに現実的なハイパーリンクを作成するのは、リンク属性を設定するよりも少し複雑です。参考までに[DSClickableURLTextField](http://www.nightproductions.net/developer.htm#DSClickableURLTextField)をチェックすることをお勧めします。 –

+0

これは今日はうまくいきません。 NSButtonsは自分の背景を描画し、その種類に応じて色を変更することが大好きです。これをもう排除するオプションの組込みボタンタイプと組み合わせはありません。 – Sean256

18

あなたにはいくつかのオプションがあります。フランシスの答えは一つの選択肢です。別のオプションは、NSTextFieldをサブクラス化して-mouseDown:を上書きすることです。このような何か(、私の頭の上をオフに書かれてテストされていません):

@interface ClickableTextField : NSTextField 
@end 

@implementation ClickableTextField 

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    [self sendAction:[self action] to:[self target]]; 
} 

@end 

NSTextFieldはあなたが必要とする外観スタイルで近い場合、これはより良いアプローチかもしれません。 NSButtonの機能が必要な場合(クリックして強調表示など)、Francisのソリューションにアクセスしてください。

+0

上記のDSClickableURLTextFieldを実際に変更して、ユーザーがクリックした領域で開くURLがない場合は、提案したとおりにアクションをトリガーします。簡単な変更、アイデアのおかげで。 – SilverSideDown

+0

これはカーソルの更新を除いて完璧に機能しますが、これは簡単に回避できます –

2

もう1つの選択肢は、ラベルの前に透明なボタン(タイトル/画像/枠なし、瞬間的な押し込み)を作成し、ラベルのフレームと同じフレームを作成することです。それに応じてボタンの動作を設定します。