0

AppKitNSBrowser似乎有一个错误,即该方法*/ - (void)editItemAtIndexPath:(NSIndexPath *)indexPath withEvent:(NSEvent *)theEvent select:(BOOL)select不适用于浏览器中的第一列。如果 indexPath 指向第一列中的项目,则不会发生任何事情。在http://www.cocoabuilder.com/archive/cocoa/327335-nsbrowser-edititematindexpath-withevent-select.html还有另一个证据。

我一直在研究解决该错误的方法。有关代码,请参阅我的答案。

4

1 回答 1

0

我找到的解决方案是在选择单元格后模拟返回键的按键,该键进入单元格的编辑模式。选择正确的项目留给读者练习。坦率地说,如果您遇到上述问题,您可能之前已经选择了该项目。

我只在我想编辑第一列的情况下模拟按键,尽管它可能也适用于其他列,但对于他们来说,我更喜欢使用真正的 API,即editItemAtIndexPath:withEvent:select:.

所以首先我检查 indexPath 的长度,看它是否等于 1。如果是,下面的代码模拟返回键的按下和释放。selfNSViewController,因此您可能需要根据调用此代码的位置进行调整:

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];

别忘了#import <Carbon/Carbon.h>for GetCurrentEventTime()。我花了一段时间才找到这个。

于 2015-09-08T16:15:59.363 回答