AppKit的NSBrowser似乎有一个错误,即*/ - (void)editItemAtIndexPath:(NSIndexPath *)indexPath withEvent:(NSEvent *)theEvent select:(BOOL)select方法在浏览器的第一列中不起作用。如果indexPath指向第一列中的项,则不会发生任何事情。在http://www.cocoabuilder.com/archive/cocoa/327335-nsbrowser-edititematindexpath-withevent-select.html上还有另一个证据。
我一直在研究解决这个bug的办法。代码见我的答案。
发布于 2015-09-09 00:15:59
我发现的解决方案是在单元格被选中后,模拟按回车键,进入单元格的编辑模式。选择正确的项目是留给读者的练习。坦率地说,如果你遇到了上面的问题,你可能已经选择了这个项目。
我只在我想要编辑第一列的情况下模拟按键,尽管它可能在其他列中也可以工作,但对于它们,我更喜欢使用真正的API,即editItemAtIndexPath:withEvent:select:。
因此,我首先检查indexPath的长度,看看它是否等于1。如果是,下面的代码模拟按下和释放return键的过程。self是一个NSViewController,因此您可能需要根据调用此代码的位置进行调整:
NSInteger windowNumber = [[self.view window] windowNumber];
NSEvent *keyDownReturn = [NSEvent keyEventWithType:NSKeyDown location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:windowNumber context:[NSGraphicsContext currentContext] characters:@"\r" charactersIgnoringModifiers:@"\r" isARepeat:NO keyCode:36];
NSEvent *keyUpReturn = [NSEvent keyEventWithType:NSKeyUp location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:windowNumber context:[NSGraphicsContext currentContext] characters:@"\r" charactersIgnoringModifiers:@"\r" isARepeat:NO keyCode:36];
[NSApp sendEvent:keyDownReturn];
[NSApp sendEvent:keyUpReturn];别忘了在GetCurrentEventTime()上使用#import <Carbon/Carbon.h>。我花了一段时间才找到这个。
https://stackoverflow.com/questions/32462636
复制相似问题