Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Cocoa:单击并短时间延迟后使NSTextField可编辑(如在Finder中重命名)_Macos_Cocoa_Fieldeditor - Fatal编程技术网

Macos Cocoa:单击并短时间延迟后使NSTextField可编辑(如在Finder中重命名)

Macos Cocoa:单击并短时间延迟后使NSTextField可编辑(如在Finder中重命名),macos,cocoa,fieldeditor,Macos,Cocoa,Fieldeditor,我找不到一个简单的例子来说明如何使用NSTextField就地编辑其内容 与Finder中的完全相同-您可以单击,并在短时间内使文本字段变为可编辑 它似乎是文本字段、单元格和字段编辑器的某种组合?问题是我找不到最基本的例子来说明如何做 我尝试过通过两个不同的测试对NSTextField进行子类化,但都没有成功: #import "GWTextField.h" @implementation GWTextField - (id) initWithFrame:(NSRect)frameRect {

我找不到一个简单的例子来说明如何使用NSTextField就地编辑其内容

与Finder中的完全相同-您可以单击,并在短时间内使文本字段变为可编辑

它似乎是文本字段、单元格和字段编辑器的某种组合?问题是我找不到最基本的例子来说明如何做

我尝试过通过两个不同的测试对NSTextField进行子类化,但都没有成功:

#import "GWTextField.h"
@implementation GWTextField
- (id) initWithFrame:(NSRect)frameRect {
    self = [super initWithFrame:frameRect];
    return self;
}
- (void) mouseDown:(NSEvent *)theEvent {
    [super mouseDown:theEvent];
    [self.cell editWithFrame:self.frame inView:self.superview editor:[self.cell fieldEditorForView:self] delegate:self event:theEvent];
    //[self setEditable:TRUE];
    //[self setSelectable:TRUE];
    //[self selectText:nil];
    [NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(edit:) userInfo:nil repeats:FALSE];
}
- (void) edit:(id) sende {
    NSLog(@"edit");
    [[NSApplication sharedApplication].mainWindow makeFirstResponder:self];
    [self selectText:nil];
}
@end

有什么想法吗?

在我的应用程序中,我有两个文本字段-一个是不可编辑的,另一个是隐藏的、可编辑的,并通过调用以下命令激活标题编辑:

[self addSubview:windowTitle];
[windowTitleLabel removeFromSuperview]; 
[self.window makeFirstResponder:windowTitle];   
这是从标签后面的视图上的mouseUp:on调用的


我不记得为什么我需要两个文本字段(当时我不知道Cocoa good),即使没有标签交换,它也可能工作。

在我的应用程序中,我有两个文本字段-一个是不可编辑的,另一个是隐藏的,可编辑的,并通过调用以下命令激活标题编辑:

[self addSubview:windowTitle];
[windowTitleLabel removeFromSuperview]; 
[self.window makeFirstResponder:windowTitle];   
这是从标签后面的视图上的mouseUp:on调用的


我不记得为什么我需要两个文本字段(当时我不知道Cocoa good),即使没有标签交换,它也可能工作。

在我的应用程序中,我有两个文本字段-一个是不可编辑的,另一个是隐藏的,可编辑的,并通过调用以下命令激活标题编辑:

[self addSubview:windowTitle];
[windowTitleLabel removeFromSuperview]; 
[self.window makeFirstResponder:windowTitle];   
这是从标签后面的视图上的mouseUp:on调用的


我不记得为什么我需要两个文本字段(当时我不知道Cocoa good),即使没有标签交换,它也可能工作。

在我的应用程序中,我有两个文本字段-一个是不可编辑的,另一个是隐藏的,可编辑的,并通过调用以下命令激活标题编辑:

[self addSubview:windowTitle];
[windowTitleLabel removeFromSuperview]; 
[self.window makeFirstResponder:windowTitle];   
这是从标签后面的视图上的mouseUp:on调用的


我不记得为什么我需要有两个文本字段(当时我不知道Cocoa很好),即使没有标签交换,它也可能工作。

我构建了一个可重用的NSTextField子类,可以用于就地编辑功能

我构建了一个可重用的NSTextField子类,您可以将其用于在位编辑功能

我构建了一个可重用的NSTextField子类,您可以将其用于在位编辑功能

我构建了一个可重用的NSTextField子类,您可以将其用于在位编辑功能

我想出了一个更好的解决原地编辑问题的方法。我相信这就是如何正确地使用NSCell进行在位编辑。如果这是错误的,请出示并告知

#import <Cocoa/Cocoa.h>
@interface EditTextField : NSTextField <NSTextDelegate>
@end

---

#import "EditTextField.h"

@implementation EditTextField

- (void) mouseDown:(NSEvent *)theEvent {
    if(theEvent.clickCount == 2) {
        self.editable = TRUE;
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell editWithFrame:self.bounds inView:self editor:fieldEditor delegate:self event:theEvent];
    } else {
        [super mouseDown:theEvent];
    }
}

- (void) cancelOperation:(id)sender {
    [self.cell endEditing:nil];
    self.editable = FALSE;
}

- (BOOL) textView:(NSTextView *) textView doCommandBySelector:(SEL) commandSelector {
    NSString * selector = NSStringFromSelector(commandSelector);
    if([selector isEqualToString:@"insertNewline:"]) {
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell endEditing:fieldEditor];
        self.editable = FALSE;
        return TRUE;
    }
    return FALSE;
}

@end
#导入
@接口EditTextField:NSTextField
@结束
---
#导入“EditTextField.h”
@实现EditTextField
-(无效)鼠标向下移动:(n事件*)事件{
如果(theEvent.clickCount==2){
self.editable=TRUE;
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell editWithFrame:self.bounds在视图:self-editor:fieldEditor委托:self-event:theEvent];
}否则{
[超级鼠标镇:theEvent];
}
}
-(作废)取消操作:(id)发送方{
[self.cell endEditing:nil];
self.editable=FALSE;
}
-(BOOL)textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{
NSString*selector=NSStringFromSelector(命令选择器);
if([selector isEqualToString:@“insertNewline:”){
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell endEditing:fieldEditor];
self.editable=FALSE;
返回TRUE;
}
返回FALSE;
}
@结束

我想出了一个更好的解决原地编辑问题的方法。我相信这就是如何正确地使用NSCell进行在位编辑。如果这是错误的,请出示并告知

#import <Cocoa/Cocoa.h>
@interface EditTextField : NSTextField <NSTextDelegate>
@end

---

#import "EditTextField.h"

@implementation EditTextField

- (void) mouseDown:(NSEvent *)theEvent {
    if(theEvent.clickCount == 2) {
        self.editable = TRUE;
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell editWithFrame:self.bounds inView:self editor:fieldEditor delegate:self event:theEvent];
    } else {
        [super mouseDown:theEvent];
    }
}

- (void) cancelOperation:(id)sender {
    [self.cell endEditing:nil];
    self.editable = FALSE;
}

- (BOOL) textView:(NSTextView *) textView doCommandBySelector:(SEL) commandSelector {
    NSString * selector = NSStringFromSelector(commandSelector);
    if([selector isEqualToString:@"insertNewline:"]) {
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell endEditing:fieldEditor];
        self.editable = FALSE;
        return TRUE;
    }
    return FALSE;
}

@end
#导入
@接口EditTextField:NSTextField
@结束
---
#导入“EditTextField.h”
@实现EditTextField
-(无效)鼠标向下移动:(n事件*)事件{
如果(theEvent.clickCount==2){
self.editable=TRUE;
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell editWithFrame:self.bounds在视图:self-editor:fieldEditor委托:self-event:theEvent];
}否则{
[超级鼠标镇:theEvent];
}
}
-(作废)取消操作:(id)发送方{
[self.cell endEditing:nil];
self.editable=FALSE;
}
-(BOOL)textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{
NSString*selector=NSStringFromSelector(命令选择器);
if([selector isEqualToString:@“insertNewline:”){
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell endEditing:fieldEditor];
self.editable=FALSE;
返回TRUE;
}
返回FALSE;
}
@结束

我想出了一个更好的解决原地编辑问题的方法。我相信这就是如何正确地使用NSCell进行在位编辑。如果这是错误的,请出示并告知

#import <Cocoa/Cocoa.h>
@interface EditTextField : NSTextField <NSTextDelegate>
@end

---

#import "EditTextField.h"

@implementation EditTextField

- (void) mouseDown:(NSEvent *)theEvent {
    if(theEvent.clickCount == 2) {
        self.editable = TRUE;
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell editWithFrame:self.bounds inView:self editor:fieldEditor delegate:self event:theEvent];
    } else {
        [super mouseDown:theEvent];
    }
}

- (void) cancelOperation:(id)sender {
    [self.cell endEditing:nil];
    self.editable = FALSE;
}

- (BOOL) textView:(NSTextView *) textView doCommandBySelector:(SEL) commandSelector {
    NSString * selector = NSStringFromSelector(commandSelector);
    if([selector isEqualToString:@"insertNewline:"]) {
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell endEditing:fieldEditor];
        self.editable = FALSE;
        return TRUE;
    }
    return FALSE;
}

@end
#导入
@接口EditTextField:NSTextField
@结束
---
#导入“EditTextField.h”
@实现EditTextField
-(无效)鼠标向下移动:(n事件*)事件{
如果(theEvent.clickCount==2){
self.editable=TRUE;
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell editWithFrame:self.bounds在视图:self-editor:fieldEditor委托:self-event:theEvent];
}否则{
[超级鼠标镇:theEvent];
}
}
-(作废)取消操作:(id)发送方{
[self.cell endEditing:nil];
self.editable=FALSE;
}
-(BOOL)textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{
NSString*selector=NSStringFromSelector(命令选择器);
if([selector isEqualToString:@“insertNewline:”){
NSText*fieldEditor=[self.window fieldEditor:TRUE for object:self];
[self.cell endEditing:fieldEditor];
self.editable=FALSE;
返回TRUE;
}
返回FALSE;
}
@结束

我想出了一个更好的解决原地编辑问题的方法。我相信这就是如何正确地使用NSCell进行在位编辑。如果这是错误的,请出示并告知

#import <Cocoa/Cocoa.h>
@interface EditTextField : NSTextField <NSTextDelegate>
@end

---

#import "EditTextField.h"

@implementation EditTextField

- (void) mouseDown:(NSEvent *)theEvent {
    if(theEvent.clickCount == 2) {
        self.editable = TRUE;
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell editWithFrame:self.bounds inView:self editor:fieldEditor delegate:self event:theEvent];
    } else {
        [super mouseDown:theEvent];
    }
}

- (void) cancelOperation:(id)sender {
    [self.cell endEditing:nil];
    self.editable = FALSE;
}

- (BOOL) textView:(NSTextView *) textView doCommandBySelector:(SEL) commandSelector {
    NSString * selector = NSStringFromSelector(commandSelector);
    if([selector isEqualToString:@"insertNewline:"]) {
        NSText * fieldEditor = [self.window fieldEditor:TRUE forObject:self];
        [self.cell endEditing:fieldEditor];
        self.editable = FALSE;
        return TRUE;
    }
    return FALSE;
}

@end
#导入