NSEvent
コードを持っていないビューに既に渡された s を取得する方法はありません。ビューまたはコントロールのキー処理動作を変更する場合は、サブクラス化する必要があります。レスポンダーチェーンの検索フィールドの前に別のオブジェクトを挿入し、イベントを取得し、好きなことをしてから、それを処理しなかったかのように振る舞い、フィールドに渡すことができるかもしれません...ただのワイルドな考えです頭の上から。
keyUp:
あなたのコードに返信してUPDATE :
さて、問題は明らかになりつつあります。コードでその新しいcustomer
* オブジェクトを作成するときは、その接続もコードでフックする必要があります。彼らはあなたのために接続されていません。これには実際には使用しませんIBOutlets
。通常の古い ivar だけです。IBOutlets
Interface Builder のグラフィカル インターフェイスでオブジェクトを接続できるようにするためだけに存在します。で何をしようとしているのか正確にはわかりませんがsearcht:
、例として、テキスト フィールドの内容を変更したい場合:
- (void)searcht:(NSString *)theString {
// Do some stuff with the string
[myTextField setStringValue:someResultString];
}
customer.h は次のようになります。
@interface customer : NSObject {
IBOutlet NSTextField * myTextField;
}
myTextField
is であるため、これは警告を出さないことを含め、何もしませんnil
。nil
一日中メソッドを呼び出すことができ、何も起こりません。必要なことは、customer
オブジェクトにテキスト フィールドへのポインターを与えることです。これは であってはなりませんIBOutlet
。メソッドでこれを行うか、単に直接設定することによって行うことができますinit...
(これは、検索フィールドを に渡すためにテキスト フィールドへの接続が必要になることに注意してください。これは、Customer
望ましい場合とそうでない場合があります)。 :
@interface Customer : NSObject {
NSTextField * myTextField;
}
@property NSTextField * myTextField; // Note: does not need to be retained.
@end
#import "Customer.h"
@implementation Customer
@synthesize myTextField;
- (id)initUsingTextField:(NSTextField *)tf {
if( !(self = [super init]) ) {
return nil;
}
myTextField = tf;
return self;
}
@end
※余談ですが、Obj-Cのクラス名は大文字で始まるのが慣例で、「customer」ではなく「Customer」です。