如何在单击NSComboBox时使NSTextField消失?这是我使用的代码:
类comboBox:(在接口构建器中用作我的NSComboBox的自定义类) comboBox.h:
#import <Cocoa/Cocoa.h>
@interface comboBox1 : NSComboBox
-(void)Hide;
@endcomboBox.m:
#import "comboBox1.h"
@implementation comboBox1
-(void)Hide
{
[self setHidden:YES];
}
@end类txtField:(在接口构建器中用作我的NSTextField的自定义类) txtField.h:
#import <Cocoa/Cocoa.h>
@interface txtField1 : NSTextField
@endtxtField.m:
#import "txtField1.h"
#import "comboBox1.h"
@implementation txtField1
-(void)mouseDown:(NSEvent *)theEvent
{
comboBox1 *obj = [[comboBox1 alloc] init];
[obj Hide];
}
@end但它不起作用:当单击TextField时,什么也不会发生。谢谢你的建议。
发布于 2013-03-06 23:11:50
您的mouseDown:方法是这里的罪魁祸首。不是引用NIB中的comboBox1,而是每次都创建一个新的comboBox1实例,并告诉这个新实例“隐藏”。除了内存泄漏之外,您可能不希望每次单击NSTextField时都有一个新的comboBox1。
相反,使用NSTextField的委托方法来获得您想要的东西。
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;由于您使用的是IB,因此我假设您有一个同时具有txtField1和comboBox1的视图或WindowController。在您的ViewController (或WindowController)中,将ViewController设置为NSTextField的委托,并告诉comboBox1隐藏在某个委托方法中。
举个例子:
在ViewController.h中,首先声明两个对象:
@property (assign) IBOutlet comboBox1 *comboBox1;
@property (assign) IBOutlet txtField1 *txtField1;然后在你的实现中:
- (void)controlTextDidBeginEditing:(NSNotification *)obj {
[comboBox1 hide];
}但不要忘记在接口生成器中将插座连接到您的ViewController。还要将txtField1的delegate插座连接到视图控制器。
发布于 2013-03-06 22:57:23
您可以使用NSTextfield的委托方法
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;更新
苹果提供了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.
}https://stackoverflow.com/questions/15248130
复制相似问题