Fixed: subviews in cib did not receive view(Will/Did)MoveToSuperview:

In Cocoa, viewWillMoveToSuperview: and viewDidMoveToSuperview: are called when views are instantiated from code or from a nib.

Previously in Cappuccino, when a view was instantiated from a cib, the _subviews of the view were directly set from the decoded subview array. This short-circuited all of the normal notifications a view receives when added to a superview, including viewWillMoveToSuperview: and viewDidMoveToSuperview:. As a result, some views that override these methods, such as CPSearchField, were not set up correctly when instantiated from a cib.

With this commit, subviews instantiated from a cib are manually added to their superview, thus ensuring they go through the same cycle as views instantiated from code, and ensuring that viewWillMoveToSuperview: and viewDidMoveToSuperview: are called.

Closes #1699
This commit is contained in:
Aparajita Fishman committed 2013-02-25 20:09:18 -05:00
1 parent 887421c9fa
commit 471641c228
2 files changed
+15 -1

No files matched your search

+13 -1
View File
@@ -3045,9 +3045,21 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
_tag = [aCoder containsValueForKey:CPViewTagKey] ? [aCoder decodeIntForKey:CPViewTagKey] : -1;
_window = [aCoder decodeObjectForKey:CPViewWindowKey];
_subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey] || [];
_superview = [aCoder decodeObjectForKey:CPViewSuperviewKey];
// We have to manually add the subviews so that they will receive
// viewWillMoveToSuperview: and viewDidMoveToSuperview:
_subviews = [];
var subviews = [aCoder decodeObjectForKey:CPViewSubviewsKey] || [];
for (var i = 0, count = [subviews count]; i < count; ++i)
{
// addSubview won't do anything if the superview is already self, so clear it
subviews[i]._superview = nil;
[self addSubview:subviews[i]];
}
// FIXME: Should we encode/decode this?
_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];
+2
View File
@@ -623,6 +623,7 @@ var concat = Array.prototype.concat,
for (; index < count; ++index)
{
aFunction([self objectAtIndex:index], index, shouldStopRef);
if (shouldStop)
return;
}
@@ -648,6 +649,7 @@ var concat = Array.prototype.concat,
for (; index !== stop; index += increment)
{
aFunction([self objectAtIndex:index], index, AT_REF(shouldStop));
if (shouldStop)
return;
}