单击NSTextField时,如何使NSComboBox消失? 这是我正在使用的代码:
类comboBox :(在界面构建器中用作我的NSComboBox的自定义类) comboBox.h:
#import <Cocoa/Cocoa.h>
@interface comboBox1 : NSComboBox
-(void)Hide;
@end
comboBox.m:
#import "comboBox1.h"
@implementation comboBox1
-(void)Hide
{
[self setHidden:YES];
}
@end
类txtField :(在接口构建器中用作我的NSTextField的自定义类) txtField.h:
#import <Cocoa/Cocoa.h>
@interface txtField1 : NSTextField
@end
txtField.m:
#import "txtField1.h"
#import "comboBox1.h"
@implementation txtField1
-(void)mouseDown:(NSEvent *)theEvent
{
comboBox1 *obj = [[comboBox1 alloc] init];
[obj Hide];
}
@end
但它不起作用:单击TextField时没有任何反应。 谢谢你的建议。
答案 0 :(得分:0)
您可以使用NSTextfield
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;
更新
Apple提供了NSTrackingAreas.
的文档和示例- (void) viewWillMoveToWindow:(NSWindow *)newWindow {
// Setup a new tracking area when the view is added to the window.
NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[textfield frame] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
}
- (void) mouseEntered:(NSEvent*)theEvent {
// Mouse entered tracking area.
}
- (void) mouseExited:(NSEvent*)theEvent {
// Mouse exited tracking area.
}
答案 1 :(得分:0)
您的mouseDown:
方法是罪魁祸首。您不必引用NIB中的comboBox1,而是每次都创建一个新的comboBox1实例,并将该新实例告诉“隐藏”。在那里泄漏内存旁边,每次单击NSTextField时,您可能不需要新的comboBox1。
而是使用NSTextField的委托方法来获得你想要的东西。
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;
因为你正在使用IB我假设你有一个带有txtField1和comboBox1的View-或WindowController。 在ViewController(或WindowController)中,将ViewController设置为NSTextField的委托,并告诉comboBox1隐藏在其中一个委托方法中。
一个例子:
在ViewController.h中,首先声明两个对象:
@property (assign) IBOutlet comboBox1 *comboBox1;
@property (assign) IBOutlet txtField1 *txtField1;
然后在您的实施中:
- (void)controlTextDidBeginEditing:(NSNotification *)obj {
[comboBox1 hide];
}
不要忘记在Interface Builder中将插座连接到ViewController。还要将txtField1的delegate
插座连接到Viewcontroller。