首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击NSTextField时显示NSComboBox

单击NSTextField时显示NSComboBox
EN

Stack Overflow用户
提问于 2013-03-06 21:05:20
回答 2查看 775关注 0票数 0

如何在单击NSComboBox时使NSTextField消失?这是我使用的代码:

类comboBox:(在接口构建器中用作我的NSComboBox的自定义类) comboBox.h:

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>
@interface comboBox1 : NSComboBox
-(void)Hide;
@end

comboBox.m:

代码语言:javascript
复制
#import "comboBox1.h"
@implementation comboBox1
-(void)Hide
{
    [self setHidden:YES];
}
@end

类txtField:(在接口构建器中用作我的NSTextField的自定义类) txtField.h:

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>
@interface txtField1 : NSTextField
@end

txtField.m:

代码语言:javascript
复制
#import "txtField1.h"
#import "comboBox1.h"
@implementation txtField1
-(void)mouseDown:(NSEvent *)theEvent
{
    comboBox1 *obj = [[comboBox1 alloc] init];
    [obj Hide];
}
@end

但它不起作用:当单击TextField时,什么也不会发生。谢谢你的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-06 23:11:50

您的mouseDown:方法是这里的罪魁祸首。不是引用NIB中的comboBox1,而是每次都创建一个新的comboBox1实例,并告诉这个新实例“隐藏”。除了内存泄漏之外,您可能不希望每次单击NSTextField时都有一个新的comboBox1。

相反,使用NSTextField的委托方法来获得您想要的东西。

代码语言:javascript
复制
- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;

由于您使用的是IB,因此我假设您有一个同时具有txtField1和comboBox1的视图或WindowController。在您的ViewController (或WindowController)中,将ViewController设置为NSTextField的委托,并告诉comboBox1隐藏在某个委托方法中。

举个例子:

在ViewController.h中,首先声明两个对象:

代码语言:javascript
复制
@property (assign) IBOutlet comboBox1 *comboBox1;
@property (assign) IBOutlet txtField1 *txtField1;

然后在你的实现中:

代码语言:javascript
复制
- (void)controlTextDidBeginEditing:(NSNotification *)obj {
    [comboBox1 hide];
}

但不要忘记在接口生成器中将插座连接到您的ViewController。还要将txtField1的delegate插座连接到视图控制器。

票数 0
EN

Stack Overflow用户

发布于 2013-03-06 22:57:23

您可以使用NSTextfield的委托方法

代码语言:javascript
复制
 - (void)controlTextDidBeginEditing:(NSNotification *)obj;
 - (void)controlTextDidEndEditing:(NSNotification *)obj;
 - (void)controlTextDidChange:(NSNotification *)obj;

更新

苹果提供了NSTrackingAreas.的文档和示例

代码语言:javascript
复制
- (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.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15248130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档