Thanks Keary,

It all makes sense.    Deceptive is the word "below" in the reference guide, 
which I usually interpret using the direction of gravity.

Philip


On Mar 13, 2012, at 1:49 PM, Keary Suska wrote:

> 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