如何检测NSTextField何时具有焦点或是其内容选择可可 [英] How to detect when NSTextField has the focus or is it's content selected cocoa
问题描述
我在NSTableCellView里面有一个NSTextField,我想要一个事件通知我当我的NSTextField有重点禁用几个按钮,我发现这个方法:
I have a NSTextField inside of a NSTableCellView, and I want an event which informs me when my NSTextField has got the focus for disabling several buttons, I found this method:
-(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,而不是当我已经开始键入
but it triggers just when my textfield is begin editing as this says, I want the buttons disabled when I get the focus on the textField, not when I already started to type
EDIT:根据Joshua Nozzi收到的帮助,我的代码仍然无效。
Gonna put my code based on the help received by Joshua Nozzi, it still doesn't work
MyNSTextField.h
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
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
on my 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)
it's important to say in visual editor, already changed all my NSTextFields to MyNSTextField class and set delegate to my File's Owner (EdicionDeCuentasWC)
推荐答案
我有一个自定义的 NSTextField
子类覆盖 -becomeFirstResponder
和 -resignFirstResponder
。它的 -cellView
属性需要符合声明 -textDidBecome / ResignFirstResponder:(NSTextField *)sender
给你一般的想法。它可以轻松地修改为发布通知,您的控制器可以注册为观察员。
I have a custom NSTextField
subclass that overrides -becomeFirstResponder
and -resignFirstResponder
. Its -cellView
property requires conformance to a protocol that declares -textDidBecome/ResignFirstResponder:(NSTextField *)sender
but it's enough to give you the general idea. It can easily be modified to post notifications for which your controller can register as an observer. I hope this helps.
- (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;
}
这篇关于如何检测NSTextField何时具有焦点或是其内容选择可可的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!