• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Keyboard Loop in Programmatically Created Window
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Keyboard Loop in Programmatically Created Window


  • Subject: Keyboard Loop in Programmatically Created Window
  • From: Jerry Krinock <email@hidden>
  • Date: Sat, 31 Mar 2007 22:14:54 -0700

I've created a window programmatically (no Interface Builder, no nib). In order to get the "tabbing" to work, I've set its initialFirstResponder, firstResponder, and nextKeyViews of three buttons, closing the loop at the end.

Result: The initialFirstResponder gets focus when the window appears as desired, but the tabbing doesn't work. Searching list archives shows others with similar problem, no solutions.

Here is the code that I use to verify that the loop is set up correctly:

NSView* r ;
r = [window initialFirstResponder] ;
NSLog(@"initialFirstResponder = %x %@", r, [(NSButton*)r title]) ;
r = (NSView*)[window firstResponder] ;
NSLog(@"firstResponder = %x %@", r, [(NSButton*)r title]) ;
r = [r nextKeyView] ;
NSLog(@"secondResponder = %x %@", r, [(NSButton*)r title]) ;
r = [r nextKeyView] ;
NSLog(@"thirdResponder = %x %@", r, [(NSButton*)r title]) ;
r = [r nextKeyView] ;
NSLog(@"fourthResponder = %x %@", r, [(NSButton*)r title]) ;

And the resulting console log:

initialFirstResponder = 15e720a0 Keep securely in my Keychain.
firstResponder = 15e720a0 Keep securely in my Keychain.
secondResponder = 15e387a0 Cancel
thirdResponder = 15e12300 OK
fourthResponder = 15e720a0 Keep securely in my Keychain.

which all looks cool to me; you see the fourthResponder is actually the same as the firstResponder, indicating that the loop is closed.

Does anyone know what else I need to do?

Jerry Krinock


Here's all the code:

@interface NSView (KeyboardLooping)

- (void)makeNextKeyViewOfWindow:(NSWindow*)window
                 firstResponder:(NSView**)hdlFirstResponder
              previousResponder:(NSView**)hdlPreviousResponder ;

@end

@implementation NSView (KeyboardLooping)

- (void)makeNextKeyViewOfWindow:(NSWindow*)window
                 firstResponder:(NSView**)hdlFirstResponder
              previousResponder:(NSView**)hdlPreviousResponder {
    if (!*hdlFirstResponder) {
        if ([window makeFirstResponder:self]) {
            [window setInitialFirstResponder:self] ;
            *hdlFirstResponder = self ;
            *hdlPreviousResponder = self ;
        }
    }
    else {
        [*hdlPreviousResponder setNextKeyView:self] ;
        *hdlPreviousResponder = self ;
    }
}

@end


// Set up the keyboard loop for tabbing // In this example, the thirdButton and helpButton are nil // But it still works since messages to nil are ignored. NSView* firstResponder = nil ; NSView* previousResponder = nil ; NSView* responder = nil ; responder = checkbox ; [responder makeNextKeyViewOfWindow:window firstResponder:&firstResponder previousResponder:&previousResponder] ; responder = helpButton ; [responder makeNextKeyViewOfWindow:window firstResponder:&firstResponder previousResponder:&previousResponder] ; responder = secondButton ; [responder makeNextKeyViewOfWindow:window firstResponder:&firstResponder previousResponder:&previousResponder] ; responder = thirdButton ; [responder makeNextKeyViewOfWindow:window firstResponder:&firstResponder previousResponder:&previousResponder] ; responder = firstButton ; [responder makeNextKeyViewOfWindow:window firstResponder:&firstResponder previousResponder:&previousResponder] ; [responder setNextKeyView:firstResponder] ; // Close the loop



_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Prev by Date: Re: updating UI during long loop using cocoa objective-c
  • Previous by thread: Re: updating UI during long loop using cocoa objective-c
  • Index(es):
    • Date
    • Thread