Я работаю над крошечным приложением только для того, чтобы изучить какао, и мне трудно настроить FirstResponder для некоторых NSTextFields.
Когда представление открывается, я хочу, чтобы был выбран первый NSTextField, clientNumber, поэтому я запускаю [clientNumber beFirstResponder] в конце моего метода loadView, но он не выбирает текстовое поле. Но когда я нажимаю кнопку, запускающую метод (IBAction)addToArray, он выбирает правильное текстовое поле. Кроме того, у меня есть еще одно текстовое поле, оно должно содержать только целые числа, поэтому у меня есть грубая проверка для него. Когда содержимое не является целым, я получаю звуковой сигнал, как и должно быть, но не выбирает текстовое поле.
Вот мой код:
- (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]; вместо того, чтобы стать первым ответчиком. Но это все еще не работает.