爲了學習可可,我正在一個小應用程序中工作,並且Im很難將FirstResponder設置爲某些NSTextFields。在Cocoa Mac OSX中設置FirstResponder的問題
當視圖打開時,我想要選擇第一個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]代表]; [appDelegate.window makeFirstResponder:self.invoiceCredit]; 而不是成爲FirstResponder。但它仍然無法正常工作。
當窗口首先打開時,文本字段未加載。根據用戶在窗口中單擊哪個按鈕,會加載五個不同的視圖。所以這就是爲什麼我必須將焦點放在適當的文本字段。 –