Как определить, когда NSTextField имеет фокус или его содержимое выбрано какао
У меня есть NSTextField внутри NSTableCellView, и я хочу событие, которое информирует меня, когда мой NSTextField получил фокус для отключения нескольких кнопок, я нашел этот метод:
-(void)controlTextDidBeginEditing:(NSNotification *)obj{
NSTextField *textField = (NSTextField *)[obj object];
if (textField != _nombreDelPaqueteTextField) {
[_nuevaCuentaActivoButton setEnabled:FALSE];
[_nuevaCuentaPasivoButton setEnabled:FALSE];
[_nuevaCuentaIngresosButton setEnabled:FALSE];
[_nuevaCuentaEgresosButton setEnabled:FALSE];
}
}
но это срабатывает только тогда, когда мое текстовое поле начинает редактировать, как это говорит, я хочу отключить кнопки, когда я получаю фокус на textField, а не когда я уже начал печатать
РЕДАКТИРОВАТЬ: Собираюсь поставить мой код на основе помощи, полученной Джошуа Ноцци, он все еще не работает
MyNSTextField.h
#import <Cocoa/Cocoa.h>
@class MyNSTextField;
@protocol MyNSTextFieldDelegate
@optional -(BOOL)textFieldDidResignFirstResponder:(NSTextField *)sender;
@optional -(BOOL)textFieldDidBecomeFirstResponder:(NSTextField *)sender;
@end
@interface MyNSTextField : NSTextField
@property (strong, nonatomic) id <MyNSTextFieldDelegate> cellView;
@end
MyNSTextField.m
#import "MyNSTextField.h"
@implementation MyNSTextField
- (BOOL)becomeFirstResponder
{
BOOL status = [super becomeFirstResponder];
if (status)
[self.cellView textFieldDidBecomeFirstResponder:self];
return status;
}
- (BOOL)resignFirstResponder
{
BOOL status = [super resignFirstResponder];
if (status)
[self.cellView textFieldDidResignFirstResponder:self];
return status;
}
@end
на моем viewcontroller EdicionDeCuentasWC.m
#import "MyNSTextField.h"
@interface EdicionDeCuentasWC ()<NSTableViewDataSource, NSTableViewDelegate, NSControlTextEditingDelegate, NSPopoverDelegate, MyNSTextFieldDelegate>
@end
@implementation EdicionDeCuentasWC
#pragma mark MyNSTextFieldDelegate
-(BOOL)textFieldDidBecomeFirstResponder:(NSTextField *)sender{
NSLog(@"textFieldDidBecomeFirstResponder");
return TRUE;
}
-(BOOL)textFieldDidResignFirstResponder:(NSTextField *)sender{
NSLog(@"textFieldDidResignFirstResponder");
return TRUE;
}
#pragma mark --
@end
в визуальном редакторе важно сказать, что все мои NSTextFields уже изменены на класс MyNSTextField и назначены делегаты для владельца моего файла (EdicionDeCuentasWC)