没有办法获得NSEvent
已经交给视图的 s ,而视图的代码你没有。如果要更改视图或控件的键处理行为,则必须进行子类化。您可能能够在响应者链中的搜索字段之前插入另一个对象,获取事件,做任何您想做的事情,然后表现得像您没有处理它并将其传递给该字段......只是一个疯狂的想法从我的头顶。
更新回复您的keyUp:
代码:
好的,问题越来越清楚了。当您在代码中创建新的customer
* 对象时,您还必须在代码中连接它的连接。他们没有为你连接。您实际上并没有IBOutlets
为此使用,只是普通的旧 ivars。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”。