Wie erkennt man, ob NSTextField den Fokus hat oder ob der Inhalt ausgewählt ist?
Ich habe ein NSTextField in einer NSTableCellView und ich möchte ein Ereignis, das mich darüber informiert, wenn mein NSTextField den Fokus zum Deaktivieren mehrerer Schaltflächen hat. Ich habe diese Methode gefunden:
-(void)controlTextDidBeginEditing:(NSNotification *)obj{
NSTextField *textField = (NSTextField *)[obj object];
if (textField != _nombreDelPaqueteTextField) {
[_nuevaCuentaActivoButton setEnabled:FALSE];
[_nuevaCuentaPasivoButton setEnabled:FALSE];
[_nuevaCuentaIngresosButton setEnabled:FALSE];
[_nuevaCuentaEgresosButton setEnabled:FALSE];
}
}
, aber es wird ausgelöst, sobald mein Textfeld bearbeitet wird, da dies besagt, dass die Schaltflächen deaktiviert werden sollen, wenn ich den Fokus auf das Textfeld lege, und nicht, wenn ich bereits mit der Eingabe von @ begonnen hab
BEARBEITEN Ich werde meinen Code basierend auf der Hilfe von Joshua Nozzi einfügen, es funktioniert immer noch nicht
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
Auf meinem 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
Es ist wichtig zu sagen, dass im visuellen Editor bereits alle meine NSTextFields in die MyNSTextField-Klasse geändert wurden und ein Delegat an den Eigentümer meiner Datei (EdicionDeCuentasWC) festgelegt wurde.