An update on this question. It turns out the first bit of code does not work after all, because 48 is the keyCode for [Tab] and [Shift +Tab]. I needed to change the code to the following:

-(void)keyDown:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 48 && ([theEvent modifierFlags] & NSShiftKeyMask)) // 48 is the tab key
        {
                [self editColumn:1 row:[self selectedRow] withEvent:nil 
select:YES];            
                return;
        }
        [super keyDown:theEvent];
}

Without the "return;" there is a "bing". To tell the truth, I'm not sure why I get the "bing." I'm guessing that it has something to do with the responder chain, but the thing is, the table can respond to a backtab.

The second bit of code (Code B) works, but it gives a "bing" at every keypress. Again, I'm thinking this has something to do with the responder chain; but I'm not clear what. Any ideas?

On 5-Jun-09, at 5:45 PM, K.Darcy Otto wrote:

I have an application where a 2-column NSTableView subclass is the main visual element. Users can select rows only, not columns. When the user has a row selected, and presses [Tab], the table automatically starts editing the first column. I want to make it so that when the user has a row selected, and presses [Shift+Tab] (i.e., a back-tab), the table automatically starts editing the second column (without the following code, it highlights the second- column cell, but does not begin editing). Here is the code in the subclass that I'm currently using to do this:

(Code A) -(void)keyDown:(NSEvent *)theEvent
{
        if ([theEvent keyCode] == 48) // 48 is the key code for back-tab
        {
[self editColumn:1 row:[self selectedRow] withEvent:nil select:YES];
        }
        [super keyDown:theEvent];
}

My question is, is there a more high-level way to do this? I found "48" corresponding to the back-tab by using NSLog to look at different key codes. I tried replacing "48" "NSBacktabTextMovement" and "NSBackTabCharacter" ... no dice, presumably because both NSBacktabTextMovement and NSBackTabCharacter are unicode constants, and -keyCode returns an unsigned short. I suspect I could run this through UCKeyTranslate(), but when playing around with this, I lost my nerve in the face of the 10 parameters that function requires.

According to documentation for NSEvent's -keyCode, the number is supposed to be "hardware-independent". If this means what I think it means, 48 should be the back-tab in all situations, right? So, the above code should be fine?

Incidentally, I have brought about the same effect by the following code:

(Code B) - (void)keyDown:(NSEvent *)theEvent
{
        [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
        [super keyDown:theEvent];
}

-(void)insertBacktab:(id)sender
{
        [self editColumn:1 row:[self selectedRow] withEvent:nil select:YES];
}

Is this, in some way, better than the first solution? Or is there some better way to do what I'm trying to do? Thanks.
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to