From 90722cfc67b745a1b6865c682ecb6d6ff1851de9 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Mon, 18 May 2015 14:05:19 +0300 Subject: [PATCH 1/2] Resolved #142: Modal views. --- CrossPlatformModules.csproj | 12 +++++++ application/application.ios.ts | 43 +------------------------ apps/modal-views-demo/app.ts | 3 ++ apps/modal-views-demo/login-page.ts | 32 +++++++++++++++++++ apps/modal-views-demo/login-page.xml | 7 ++++ apps/modal-views-demo/main-page.ts | 18 +++++++++++ apps/modal-views-demo/main-page.xml | 6 ++++ apps/modal-views-demo/package.json | 2 ++ ui/core/view.ios.ts | 20 ++++++++++-- ui/frame/frame-common.ts | 2 +- ui/frame/frame.ios.ts | 23 ------------- ui/page/page-common.ts | 30 +++++++++++++++++ ui/page/page.android.ts | 48 ++++++++++++++++++++++++++++ ui/page/page.d.ts | 33 +++++++++++++++++++ ui/page/page.ios.ts | 32 ++++++++++++++++--- utils/utils.d.ts | 3 ++ utils/utils.ios.ts | 45 ++++++++++++++++++++++++++ 17 files changed, 285 insertions(+), 74 deletions(-) create mode 100644 apps/modal-views-demo/app.ts create mode 100644 apps/modal-views-demo/login-page.ts create mode 100644 apps/modal-views-demo/login-page.xml create mode 100644 apps/modal-views-demo/main-page.ts create mode 100644 apps/modal-views-demo/main-page.xml create mode 100644 apps/modal-views-demo/package.json diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index d8cab45cf..863c5fdb7 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -92,6 +92,13 @@ main-page.xml + + + main-page.xml + + + login-page.xml + @@ -587,6 +594,7 @@ + Designer @@ -594,6 +602,7 @@ + @@ -1494,6 +1503,9 @@ PreserveNewest + + PreserveNewest + diff --git a/application/application.ios.ts b/application/application.ios.ts index 10f8c1c98..e5c652935 100644 --- a/application/application.ios.ts +++ b/application/application.ios.ts @@ -31,48 +31,7 @@ class Window extends UIWindow { } public layoutSubviews(): void { - if (!this._content) { - // TODO: Invalid setup, throw an exception? - return; - } - - var statusFrame = UIApplication.sharedApplication().statusBarFrame; - var statusBarHeight = 0; - - try { - statusBarHeight = Math.min(statusFrame.size.width, statusFrame.size.height); - } catch (ex) { - console.log("exception: " + ex); - } - - var isLandscape = utils.ios.isLandscape(); - - var iOSMajorVersion = utils.ios.MajorVersion; - // in iOS 8 when in landscape statusbar is hidden. - if (isLandscape && iOSMajorVersion > 7) { - statusBarHeight = 0; - } - - var deviceFrame = UIScreen.mainScreen().bounds; - var size = deviceFrame.size; - var width = size.width; - var height = size.height; - - // in iOS 7 when in landscape we switch width with height because on device they don't change even when rotated. - if (iOSMajorVersion < 8 && isLandscape) { - width = size.height; - height = size.width; - } - - var origin = deviceFrame.origin; - var left = origin.x; - var top = origin.y + statusBarHeight; - - var widthSpec = utils.layout.makeMeasureSpec(width, utils.layout.EXACTLY); - var heightSpec = utils.layout.makeMeasureSpec(height - statusBarHeight, utils.layout.EXACTLY); - - this._content.measure(widthSpec, heightSpec); - this._content.layout(left, top, width, height); + utils.ios._layoutRootView(this._content); } } diff --git a/apps/modal-views-demo/app.ts b/apps/modal-views-demo/app.ts new file mode 100644 index 000000000..cb572300b --- /dev/null +++ b/apps/modal-views-demo/app.ts @@ -0,0 +1,3 @@ +import application = require("application"); +application.mainModule = "main-page"; +application.start(); diff --git a/apps/modal-views-demo/login-page.ts b/apps/modal-views-demo/login-page.ts new file mode 100644 index 000000000..ee1d6deb6 --- /dev/null +++ b/apps/modal-views-demo/login-page.ts @@ -0,0 +1,32 @@ +import observable = require("data/observable"); +import pages = require("ui/page"); +import textField = require("ui/text-field"); + +var context: any; +var closeCallback: Function; + +var page: pages.Page; +var usernameTextField: textField.TextField; +var passwordTextField: textField.TextField; + +export function onShownModally(args: pages.ShownModallyData) { + console.log("login-page.onShownModally, context: " + args.context); + context = args.context; + closeCallback = args.closeCallback; +} + +export function onLoaded(args: observable.EventData) { + console.log("login-page.onLoaded"); + page = args.object; + usernameTextField = page.getViewById("username"); + passwordTextField = page.getViewById("password"); +} + +export function onUnloaded() { + console.log("login-page.onUnloaded"); +} + +export function onLoginButtonTap() { + console.log("login-page.onLoginButtonTap"); + closeCallback(usernameTextField.text, passwordTextField.text); +} \ No newline at end of file diff --git a/apps/modal-views-demo/login-page.xml b/apps/modal-views-demo/login-page.xml new file mode 100644 index 000000000..0db5a18df --- /dev/null +++ b/apps/modal-views-demo/login-page.xml @@ -0,0 +1,7 @@ + + + + +