On Mar 13, 2012, at 8:55 AM, Grandinetti Philip wrote:

> I'm running into a strange behavior with NSForm (and also NSMatrix).
> 
> (1) Using interface builder (in Xcode 4.3.1) I place an NSForm in a window. I 
> add a NSButton and wire it to an IBAction that sends addRow to the NSForm.
> 
> - (IBAction) addRow:(id)sender
> {
>    [form addRow];
>   [form sizeToCells];
> }
> 
> The problem is that the new row is added ABOVE the existing row, not below as 
> it's supposed to. I thought this was a problem coming from somewhere else in 
> my app, but I created a new project in Xcode and this happens even in the 
> simplest app.
> 
> I must be doing something stupid wrong, but I can't find it. Any suggestions 
> would be appreciated.


It is a bit deceptive, but the problem is not what you think. The row is in 
fact added at the bottom, but when the view is resized it is sized from the 
bottom left corner, instead of the top left, which is intuitive for humanity 
but not apparently for the founders of Cocoa.

To get the behavior you expect you need to either flip the coordinate system of 
the enclosing view or move the view back as such:

- (IBAction) addRow:(id)sender
{
  NSRect originalFrame = [form frame];
  [form addRow];
  [form sizeToCells];
  NSRect newFrame = [form frame];
  CGFloat delta = newFrame.size.height - originalFrame.size.height;
  newFrame.origin.y -= delta;
  [form setFrame:newFrame];
}

Note that -sizeToCells does not cause the view to be redrawn, so you will get 
drawing artifacts. You may use -selectTextAtIndex: to set focus on the new form 
field, which will avoid the drawing issues (maybe a little more functional than 
just calling -setNeedsDisplay:).

HTH,

Keary Suska
Esoteritech, Inc.
"Demystifying technology for your home or business"


_______________________________________________

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