From 4028cf48813ef03833dd758c26951155889f973f Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Thu, 12 Jun 2014 10:35:51 +0300 Subject: [PATCH] dialog close callback implement for Dialog class --- ui/dialogs/dialogs.android.ts | 6 ++++-- ui/dialogs/dialogs.d.ts | 2 +- ui/dialogs/dialogs.ios.ts | 14 +++++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ui/dialogs/dialogs.android.ts b/ui/dialogs/dialogs.android.ts index be9a61db5..aa6c4bd88 100644 --- a/ui/dialogs/dialogs.android.ts +++ b/ui/dialogs/dialogs.android.ts @@ -161,10 +161,12 @@ export class Dialog { private _android: android.app.AlertDialog.Builder; //private _view: view.View; - constructor(message: string, options?: dialogs.DialogButtonsOptions) { + constructor(message: string, callback?: (result: boolean) => {}, options?: dialogs.DialogButtonsOptions) { this._android = createAlertDialog(message, options); addButtonsToAlertDialog(this.android, options, function (r) { - + if (callback) { + callback(r); + } }); } diff --git a/ui/dialogs/dialogs.d.ts b/ui/dialogs/dialogs.d.ts index 5607ff0d7..a497335b5 100644 --- a/ui/dialogs/dialogs.d.ts +++ b/ui/dialogs/dialogs.d.ts @@ -117,7 +117,7 @@ } export class Dialog { - constructor(message: string, options?: DialogButtonsOptions); + constructor(message: string, callback?: (result: boolean) => {}, options?: DialogButtonsOptions); /** * Shows the dialog. */ diff --git a/ui/dialogs/dialogs.ios.ts b/ui/dialogs/dialogs.ios.ts index 227f18443..477728820 100644 --- a/ui/dialogs/dialogs.ios.ts +++ b/ui/dialogs/dialogs.ios.ts @@ -172,9 +172,21 @@ export class Dialog { //private _view: view.View; //private _nativeView: UIKit.UIView; - constructor(message: string, options?: dialogs.DialogButtonsOptions) { + constructor(message: string, callback?: (result: boolean) => {}, options?: dialogs.DialogButtonsOptions) { this._ios = createUIAlertView(message, options); addButtonsToAlertDialog(this._ios, options); + + // Assign first to local variable, otherwise it will be garbage collected since delegate is weak reference. + var delegate = createDelegate(function (view, index) { + if (callback) { + callback(index === 2 ? undefined : index === 0); + } + // Remove the local variable for the delegate. + delegate = undefined; + }); + + this._ios.delegate = delegate; + } get ios(): UIKit.UIAlertView {