每当用户点击单元格并等待或双击它时,我想从基于视图的表格单元格中显示弹出窗口。双击部分很容易,双击动作,但我找不到点击等待的方法。我可以选择表格,但我希望它类似于文本字段(它不会立即开始编辑)或Xcode中的对象库。
答案 0 :(得分:0)
您可以实现表视图委托方法tableViewSelectionDidChange:,并在该方法中调用performSelector:withObject:afterDelay:在显示弹出窗口之前添加所需的任何延迟。
答案 1 :(得分:0)
本文档描述了如何在文本字段编辑开始/结束时收到通知。
这些是实现处理它们的基本委托方法。
func control(control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
return true
}
func control(control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
return true
}
我相信你会说'#34;延迟编辑"比如在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;
}