On Aug 2, 2015, at 7:29 PM, Graham Cox <graham....@bigpond.com> wrote:

> I have a series of NSTextFields and I want to automatically move the keyboard 
> focus to the ‘next’ field when the one preceding it has a certain number of 
> characters entered. My code is:
> 
> - (void)              controlTextDidChange:(NSNotification*) obj
> {
>       NSTextField* control = [obj object];
>       
>       NSString* text = [control stringValue];
>       
>       if([text length] >= 4 )
>       {
>               NSString* shortStr = [[text substringToIndex:4] 
> uppercaseString];
>               [control setStringValue:shortStr];
>               
>               NSResponder* nextField = [control nextKeyView];
>               
>               NSLog(@"got 4 characters: '%@', moving to field: %@", shortStr, 
> nextField );
>               
>               [[self window] makeFirstResponder:nextField];
>       }
> }

You can try [[self window] selectKeyViewFollowingView:control] instead.

If that doesn't work, you can try [control.currentEditor 
tryToPerform:@selector(insertTab:) with:self].


> … the code does what it should, detecting the string length and calling 
> -makeFirstResponder when it gets a length of 4 or more …
> 
> The current field does lose focus, but the next field never gains it, so the 
> flow of text entry from field to field doesn’t occur as it should. Also, even 
> though the first field is set as the window’s initialFirstResponder, and does 
> get the keyboard focus ring, the actual field editor isn’t ready and typing 
> just produces a beep - the user has to click in the field to make it accept 
> text. These probems may well be related.

Are you certain the window is key?  Does your app do anything unusual with 
activationPolicy or activation, generally?

Regards,
Ken


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to