我正在研究一个小应用程序只是为了学习可可,我很难将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];
而不是成为第一个响应者.但它仍然无法奏效.
最佳答案 你正在努力实现这一目标.
在Interface Builder中,将窗口的initialFirstResponder出口设置为指向文本字段.
而已.
如果您绝对必须以编程方式执行此操作,请使用:
[window setInitialFirstResponder:yourTextField];
记住,如果你和Cocoa一起做一些看起来应该很简单的事情,那么你可能做错了.