我正在开发一个小应用程序只是为了学习可可,而且我很难将 FirstResponder 设置为一些 NSTextFields。
当视图打开时,我希望选择第一个 NSTextField,clientNumber,所以我在 loadView 方法的末尾触发 [clientNumber becomeFirstResponder],但它没有选择文本字段。但是当我单击触发 (IBAction)addToArray 方法的按钮时,它会选择正确的文本字段。此外,我还有另一个文本字段,它应该只包含整数,所以我有一个粗略的验证。当内容不是 int 时,我会发出哔哔声,就像它应该的那样,但它没有选择文本字段。
这是我的代码:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
NSLog(@"initWithNibName");
}
return self;
}
- (void)viewWillLoad {
NSLog(@"viewWillLoad");
}
- (void)viewDidLoad {
NSLog(@"viewDidLoad");
[self initNewInvoice];
}
- (void)loadView {
NSLog(@"loadView");
[self viewWillLoad];
[super loadView];
[self viewDidLoad];
FakturaAppDelegate *appDelegate = (FakturaAppDelegate *)[[NSApplication sharedApplication] delegate];
[appDelegate.window makeFirstResponder:self.clientNumber];
}
- (void)awakeFromNib
{
NSLog(@"awakeFromNib");
}
- (IBAction)saveInvoice:(id)sender
{
FakturaAppDelegate *appDelegate = (FakturaAppDelegate *)[[NSApplication sharedApplication] delegate];
[appDelegate.window makeFirstResponder:self.invoiceCredit];
}
- (IBAction)addToArray:(id)sender
{
[clientNumber setStringValue: @"Toodeloo"];
FakturaAppDelegate *appDelegate = (FakturaAppDelegate *)[[NSApplication sharedApplication] delegate];
[appDelegate.window makeFirstResponder:self.clientNumber];
}
- (IBAction)updateCreditDays:(id)sender
{
if(invoiceCredit.intValue){
[self updateCredit];
}else{
NSBeep();
FakturaAppDelegate *appDelegate = (FakturaAppDelegate *)[[NSApplication sharedApplication] delegate];
[appDelegate.window makeFirstResponder:self.invoiceCredit];
}
}
我真的希望有人可以在这里帮助我。
编辑:
我弄错了,谢谢你的指点,但是当我修复代码时,使用这个:FakturaAppDelegate *appDelegate = (FakturaAppDelegate *)[[NSApplication sharedApplication] delegate]; [appDelegate.window makeFirstResponder:self.invoiceCredit]; 而不是成为FirstResponder。但它仍然不起作用。