Re: Changing Subview Order Prevents Dragging
Re: Changing Subview Order Prevents Dragging
- Subject: Re: Changing Subview Order Prevents Dragging
- From: Andy Lee <email@hidden>
- Date: Tue, 14 May 2013 00:30:56 -0400
On May 13, 2013, at 11:38 PM, Quincey Morris <email@hidden> wrote:
> On May 13, 2013, at 19:41 , Graham Cox <email@hidden> wrote:
>
>> When you call -removeFromSuperview, the view is deleted, as there are no more references to it. The other methods are not called because the object ceases to exist.
>
> I believe your warning is apposite, but is not actually the cause of Tom's problem. After removing the view, his code adds it back again. If the view had already been deallocated, you'd expect a pretty big crash pretty soon (though not necessarily immediately).
>
> My guess is that the removed view is still retained by something,
I believe ARC keeps it alive by virtue of self being a strong reference. I did a quick test and found that if I do
- (void) mouseDown: (NSEvent*) event
{
NSView* superView = [self superview];
[self removeFromSuperview];
// [superView addSubview: self];
}
...then dealloc does in fact get called. But if I uncomment that one line, which references self, dealloc does not get called. This is good news -- I would want ARC to work regardless of whether it calls non-ARC code, and vice versa.
> but that removing a view from its window causes the mouse-dragging state machine to be reset. If so, immediately re-adding the view isn't going to restore the dragging state.
This sounds very plausible.
>
> I think the trick is to avoid removing the view from its superview. I'm not sure of the *best* way of doing this, but here are the things I'd try:
>
> -- Invoke 'addSubview: self' without first removing self.
On May 13, 2013, at 11:56 PM, Thomas Wetmore <email@hidden> wrote:
> This works. Thanks for the tip.
Oh, good. I was going to suggest instead of removing and re-adding self, that you remove and re-add all the sibling views that are in front of self so that they are behind self, using addSubview:positioned:relativeTo:. That would have been very ugly.
--Andy
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden