diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index f68a991c1..20dee7b20 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -131,6 +131,7 @@
page17.xml
+
@@ -591,6 +592,7 @@
+
@@ -1562,7 +1564,7 @@
False
-
+
\ No newline at end of file
diff --git a/apps/tests/pages/page18.ts b/apps/tests/pages/page18.ts
index 549255706..b47fa5771 100644
--- a/apps/tests/pages/page18.ts
+++ b/apps/tests/pages/page18.ts
@@ -1,25 +1,11 @@
-import observable = require("data/observable");
-import pages = require("ui/page");
+import pages = require("ui/page");
import frame = require("ui/frame");
+import observable = require("data/observable");
+
import trace = require("trace");
trace.setCategories("gestures");
trace.enable();
-
-
-// Event handler for Page "loaded" event attached in main-page.xml
-export function pageLoaded(args: observable.EventData) {
- //// Get the event sender
- //var page = args.object;
-
- //var textItem = new pages.MenuItem();
- //textItem.text = "from loaded";
- //textItem.on("tap", () => {
- // console.log("item added in page.loaded tapped!!!");
- //});
- //page.optionsMenu.addItem(textItem);
-}
-
export function itemTap(args) {
console.log("----- Item tapped: " + args.view.tag);
@@ -28,7 +14,6 @@ export function itemTap(args) {
});
}
-
export function itemLoaded(args: observable.EventData) {
console.log("----- Item loaded: " + (args.object).tag);
}
diff --git a/apps/tests/ui/page/page-tests.ios.ts b/apps/tests/ui/page/page-tests.ios.ts
index 795900dfb..ed5f2c04e 100644
--- a/apps/tests/ui/page/page-tests.ios.ts
+++ b/apps/tests/ui/page/page-tests.ios.ts
@@ -33,13 +33,13 @@ export function test_NavBar_isVisible_when_MenuItems_areSet() {
var navBarIsVisible = false;
var handler = function (data) {
- page.off(view.View.loadedEvent, handler);
+ page.off(PageModule.Page.navigatedToEvent, handler);
navBarIsVisible = (page.frame.ios).showNavigationBar;
}
var pageFactory = function (): PageModule.Page {
page = new PageModule.Page();
- page.on(view.View.loadedEvent, handler);
+ page.on(PageModule.Page.navigatedToEvent, handler);
var mi = new PageModule.MenuItem();
mi.text = "B";
diff --git a/apps/tests/ui/tab-view/tab-view-tests.ts b/apps/tests/ui/tab-view/tab-view-tests.ts
index 3de712bdb..9ffb81486 100644
--- a/apps/tests/ui/tab-view/tab-view-tests.ts
+++ b/apps/tests/ui/tab-view/tab-view-tests.ts
@@ -409,7 +409,7 @@ export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelected
}
export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
- var topFrame = frameModule.topmost();
+ var i: number;
var itemCount = 3;
var loadedItems = [0, 0, 0];
var unloadedItems = [0, 0, 0];
@@ -420,25 +420,24 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
function createLoadedFor(itemIndex: number) {
return function () {
- console.log("loaded item: " + itemIndex)
loadedItems[itemIndex] = loadedItems[itemIndex] + 1;
}
}
function createUnloadedFor(itemIndex: number) {
return function () {
- console.log("unloaded item: " + itemIndex)
unloadedItems[itemIndex] = unloadedItems[itemIndex] + 1;
}
}
- for (var i = 0; i < itemCount; i++) {
- items[i].view.on("loaded", createLoadedFor(i));
- items[i].view.on("unloaded", createUnloadedFor(i));
- }
-
helper.buildUIAndRunTest(tabView, function () {
try {
+ // Attach to loaded/unloaded events
+ for (i = 0; i < itemCount; i++) {
+ items[i].view.on("loaded", createLoadedFor(i));
+ items[i].view.on("unloaded", createUnloadedFor(i));
+ }
+
var detailsPageFactory = function (): pageModule.Page {
var detailsPage = new pageModule.Page();
detailsPage.content = new labelModule.Label();
@@ -451,16 +450,16 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
// Go back to the test page.
helper.goBack();
}
-
- console.log("loaded items: " + loadedItems.join(", "));
- console.log("unloadedItems items: " + unloadedItems.join(", "));
-
+
+ //console.log("loaded items: " + loadedItems.join(", "));
+ //console.log("unloadedItems items: " + unloadedItems.join(", "));
+
// Check that at least the first item is loaded and unloaded
TKUnit.assertEqual(loadedItems[0], 1, "loaded count for 1st item");
TKUnit.assertEqual(unloadedItems[0], 1, "unloaded count for 1st item");
// Check that loaded/unloaded coutns are equal for all tabs
- for (var i = 0; i < itemCount; i++) {
+ for (i = 0; i < itemCount; i++) {
TKUnit.assert(loadedItems[i] === unloadedItems[i],
"Loaded and unloaded calls are not equal for item " + i + " loaded: " + loadedItems[i] + " unloaded: " + unloadedItems[i]);
}
diff --git a/apps/tests/xml-declaration/xml-declaration-tests.ts b/apps/tests/xml-declaration/xml-declaration-tests.ts
index adbc64ebc..82d3afc00 100644
--- a/apps/tests/xml-declaration/xml-declaration-tests.ts
+++ b/apps/tests/xml-declaration/xml-declaration-tests.ts
@@ -66,8 +66,7 @@ export var test_parse_ShouldFindEventHandlersInExports = function () {
loaded = true;
}
});
-
- page.onLoaded();
+ page._emit("loaded");
TKUnit.assert(loaded, "Parse should find event handlers in exports.");
};
diff --git a/ui/page/page.ios.ts b/ui/page/page.ios.ts
index a6a48304a..98ca8011f 100644
--- a/ui/page/page.ios.ts
+++ b/ui/page/page.ios.ts
@@ -28,10 +28,28 @@ class UIViewControllerImpl extends UIViewController {
trace.write(this._owner + " viewDidLayoutSubviews, isLoaded = " + this._owner.isLoaded, trace.categories.ViewHierarchy);
this._owner._updateLayout();
}
+
+ public viewWillAppear() {
+ trace.write(this._owner + " viewWillAppear", trace.categories.Navigation);
+
+ this._owner._enableLoadedEvents = true;
+ this._owner.onLoaded();
+ this._owner._enableLoadedEvents = false;
+ }
+
+ public viewDidDisappear() {
+ trace.write(this._owner + " viewDidDisappear", trace.categories.Navigation);
+
+ this._owner._enableLoadedEvents = true;
+ this._owner.onUnloaded();
+ this._owner._enableLoadedEvents = false;
+ }
+
}
export class Page extends pageCommon.Page {
private _ios: UIViewController;
+ public _enableLoadedEvents: boolean;
constructor(options?: definition.Options) {
super(options);
@@ -44,6 +62,20 @@ export class Page extends pageCommon.Page {
this._addNativeView(newView);
}
+ public onLoaded() {
+ // loaded/unloaded events are handeled in page viewWillAppear/viewDidDisappear
+ if (this._enableLoadedEvents) {
+ super.onLoaded();
+ }
+ }
+
+ public onUnloaded() {
+ // loaded/unloaded events are handeled in page viewWillAppear/viewDidDisappear
+ if (this._enableLoadedEvents) {
+ super.onUnloaded();
+ }
+ }
+
private _addNativeView(view: viewModule.View) {
if (view) {
trace.write("Native: Adding " + view + " to " + this, trace.categories.ViewHierarchy);
diff --git a/ui/tab-view/tab-view.android.ts b/ui/tab-view/tab-view.android.ts
index 0d37598c7..7a6375a55 100644
--- a/ui/tab-view/tab-view.android.ts
+++ b/ui/tab-view/tab-view.android.ts
@@ -281,6 +281,7 @@ export class TabView extends common.TabView {
public onUnloaded() {
trace.write("TabView.onUnloaded();", common.traceCategory);
this._removeTabsIfNeeded();
+ this._unsetAdapter();
super.onUnloaded();
}
diff --git a/ui/tab-view/tab-view.ios.ts b/ui/tab-view/tab-view.ios.ts
index 360ece8e0..b4dcb5a2a 100644
--- a/ui/tab-view/tab-view.ios.ts
+++ b/ui/tab-view/tab-view.ios.ts
@@ -24,12 +24,6 @@ class UITabBarControllerImpl extends UITabBarController {
return this;
}
- public viewDidAppear(animated: boolean): void {
- trace.write("TabView.UITabBarControllerClass.viewDidAppear();", trace.categories.Debug);
- super.viewDidAppear(animated);
- this._owner.onLoaded();
- }
-
public viewDidLayoutSubviews(): void {
trace.write("TabView.UITabBarControllerClass.viewDidLayoutSubviews();", trace.categories.Debug);
super.viewDidLayoutSubviews();