每当用户单击单元格并等待或双击它时,我想从基于视图的表格单元格中显示一个弹出窗口。双击部分很容易,通过双击操作,但我找不到单击并等待的方法。我可以选择表格,但我希望它类似于文本字段(不会立即开始编辑)或 Xcode 中的对象库。
问问题
448 次
2 回答
0
本文档描述了如何在文本字段编辑开始/结束时收到通知。
这些是实现处理它们的基本委托方法。
func control(control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
return true
}
func control(control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
return true
}
解释
我相信您说的是“延迟编辑”之类的东西,例如在 Finder 中重命名。用户单击一个条目,稍等片刻,很快就会变成可编辑的。
我终于弄清楚这是如何工作的。“延迟编辑”更可能是双重作用(setDoubleAction:
)而不是正式功能的副作用。因为您有一个双击动作,所以表格视图必须等待双击间隔来确定是否会发生第二次单击。
如果不这样做setDoubleAction:
,编辑会立即在文本字段上开始。但是通过设置双重动作,我们可以使其延迟。剩下的工作只是在编辑开始时得到通知。
上面的代码都是为了这个。我检查了这是否适用于 OS X 10.10。NSButton 似乎确实被延迟了。我希望这有帮助。
另一种解决方案
如果上述方法不起作用,这是另一种方法。
准备一个
NSTextField
子类。@interface AAATextField: NSTextField @end @implementation AAATextField - (BOOL)becomeFirstResponder { NSLog(@"%@", @"editing is starting..."); return YES; } @end
准备一个
NSTableCellView
子类。@interface BBBTableCellView : NSTableCellView @property(nonatomic,readwrite,strong) NSTextField* exampleTextField; @end @implementation BBBTableCellView @synthesize exampleTextField; - (instancetype)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if (self) { exampleTextField = [[AAATextField alloc] initWithFrame:CGRectMake(20, 0, 100, 20)]; [self addSubview:exampleTextField]; [self setTextField:exampleTextField]; } return self; } @end
与
NStableView
.- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { BBBTableCellView* v = [[BBBTableCellView alloc] init]; v.exampleTextField.stringValue = @"ABCDE"; return v; }
于 2015-01-11T12:27:33.457 回答
0
您可以实现表视图委托方法 tableViewSelectionDidChange:,并在该方法中调用 performSelector:withObject:afterDelay: 以在显示弹出框之前添加所需的任何延迟。
于 2012-08-06T06:35:02.890 回答