2013-04-09 9 views
5

OS Xアプリケーションに大きなエラーメッセージをオーバーレイする静的なNSTextFieldがあります。私は、ユーザーがその下のコントロールをクリックできるようにしようとしています。それでもNSTextFieldのクリックスルー?

[largeErrorText setEnabled:NO]; 
[largeErrorText setRefusesFirstResponder:YES]; 

IBで

私が「有効」チェックを外していると私がチェックしましたがそれは働いていなかったので、私はまた、コードでそれをやった

を「第一応答を拒否します」それはその下のオブジェクトと対話する方法になっています。他に何があるのでしょうか?私はあなたが以下の画像のようなシナリオを記述していると仮定し

+0

[カスタムビューでユーザーの操作を無効にする方法]の可能複製(http://stackoverflow.com/questions/11740638/how-to-disable-user-interaction-in-a-custom-view ) –

+0

@GabrielePetronella:この質問はそれとは関係がありません – NSGod

+0

これは、相互作用を無効にすることについてです、いいえ? –

答えて

0

を示しています

enter image description here

内側の赤い長方形はNSTextFieldラベルのフレーム概要である、とあなたがたにも関わらず、それを言っていますテキストフィールドを無効にしてセットでファーストレスポンダーが拒否された場合、クリックはNSButtonに届きませんか?

このデザインシナリオでは、「重複する兄弟ビュー」と呼ばれる条件について説明します。可能であれば、私はこれを避けようとします。できない場合は、NSTextFieldラベルが、相互作用できる他のすべてのUIオブジェクトの背後にあることを確認して、目的の動作を得ることができます。ラベルを選択し、「エディタ」>「配置」>「最後に送る」を選択することで、これを行うことができます。ボタンがテキストフィールドの前にあるので、マウスイベントを適切に傍受することができます。

+0

素晴らしいコメントですが、質問には答えません。ありがとう。 –

19

オブジェクトをクリックに対して透明にする唯一の方法は、そのオブジェクト(あなたの場合はNSTextField)をサブクラス化して、nilを返すhitTestメソッドをオーバーライドすることです。このように、NSTextFieldはクリックに反応しないので、下のNSViewはクリックに応答します。

- (NSView*)hitTest:(NSPoint)aPoint 
{ 
    return nil; 
}