Hi Andy,

On Feb 25, 2009, at 11:14 AM, Andy Lee wrote:

On Feb 24, 2009, at 6:08 PM, Eric Gorr wrote:
*** [[[self view] window] makeFirstResponder:[self view]];

Pressing return will allow the editing session to end, but pressing the tab key will not

Looks like controlTextDidEndEditing: is too deep within the text field's event handling to muck with the first responder. Delaying the call to makeFirstResponder: seems to work:

[[[self view] window] performSelector:@selector(makeFirstResponder:) withObject:nil afterDelay:0.0];

(Note this passes nil to makeFirstResponder: rather than the view.) I don't know if this is foolproof -- for example, I haven't tried it with different accessibility settings. And note that if you normally have a tab loop this will defeat the tab loop.

With only a slight modification, this worked.

Since I needed to do some more work after the first responder changed, I ended up doing:

[collectionView performSelector:@selector(labelStoppedEditing:) withObject:[self view] afterDelay:0.0];

The collectionView is my custom table that holds all of my items. I simply added a selector called labelStoppedEditing to it and passed as the object the item with the label that just stopped editing ([self view]).

I don't have to worry about a tab loop...at least at this point. But, this might change, so I am hoping that there still might be another solution that would support a tab loop and would not have any of the accessibility problems you were concerned about. As my collectionView can accept first responder status, I find it odd that tabbing out of the NSTextView does not cycle around to it. After I start the edit session, I printed out my responder chain:

2009-02-25 12:01:55.217 NNAOutlineCollection-VB[62103:813] first responder: <NSTextView: 0x3e9aa0> 2009-02-25 12:02:08.002 NNAOutlineCollection-VB[62103:813] next responder: <_NSKeyboardFocusClipView: 0x3f3000> 2009-02-25 12:02:16.629 NNAOutlineCollection-VB[62103:813] next responder: <ResourceItemLabel: 0x348170> 2009-02-25 12:02:19.549 NNAOutlineCollection-VB[62103:813] next responder: <ResourceItem: 0x356690> 2009-02-25 12:02:21.798 NNAOutlineCollection-VB[62103:813] next responder: <OutlineCollectionView: 0x331e10> 2009-02-25 12:02:27.142 NNAOutlineCollection-VB[62103:813] next responder: <NSClipView: 0x326d50> 2009-02-25 12:02:29.197 NNAOutlineCollection-VB[62103:813] next responder: <OutlineCollectionScroller: 0x325650> 2009-02-25 12:02:30.484 NNAOutlineCollection-VB[62103:813] next responder: <NSView: 0x30f420> 2009-02-25 12:02:31.758 NNAOutlineCollection-VB[62103:813] next responder: <NSWindow: 0x3347d0> 2009-02-25 12:02:32.938 NNAOutlineCollection-VB[62103:813] next responder: (null)

After I receive controlTextDidEndEditing:, the responder chain looks like:

2009-02-25 12:14:33.284 NNAOutlineCollection-VB[62596:813] first responder: <NSWindow: 0x3345f0> 2009-02-25 12:14:36.413 NNAOutlineCollection-VB[62596:813] next responder: (null)

which seems very odd. It doesn't look like a tab loop is going to work if I did have one. I removed the call to performSelector:withObject:afterDelay: and tried sticking an editable NSTextField on my window just to see if I could tab to it and I could not.


Thanks again for the suggestion. If nothing else, I did learn a little bit more about cocoa because of it.



_______________________________________________

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

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

Reply via email to