From e70630f5a36091c2c1e80a3173a51b39b4ba0ceb Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 10 Nov 2015 11:01:37 +0200 Subject: [PATCH 1/2] TextView delegate improved --- ui/text-view/text-view.ios.ts | 55 ++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/ui/text-view/text-view.ios.ts b/ui/text-view/text-view.ios.ts index bd1fff0af..d35f10fac 100644 --- a/ui/text-view/text-view.ios.ts +++ b/ui/text-view/text-view.ios.ts @@ -6,44 +6,59 @@ import enums = require("ui/enums"); global.moduleMerge(common, exports); class UITextViewDelegateImpl extends NSObject implements UITextViewDelegate { - public static ObjCProtocols = [UITextViewDelegate]; + private _owner: WeakRef; - static new(): UITextViewDelegateImpl { - return super.new(); - } - - private _owner: TextView; - - public initWithOwner(owner: TextView): UITextViewDelegateImpl { - this._owner = owner; - return this; + public static initWithOwner(owner: WeakRef): UITextViewDelegateImpl { + let impl = UITextViewDelegateImpl.new(); + impl._owner = owner; + return impl; } public textViewShouldBeginEditing(textView: UITextView): boolean { - this._owner._hideHint(); + let owner = this._owner.get(); + if (!owner) { + return; + } + + owner._hideHint(); return true; } public textViewDidBeginEditing(textView: UITextView) { - this._owner.style._updateTextDecoration(); + let owner = this._owner.get(); + if (!owner) { + return; + } + + owner.style._updateTextDecoration(); } public textViewDidEndEditing(textView: UITextView) { - if (this._owner.updateTextTrigger === enums.UpdateTextTrigger.focusLost) { - this._owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + let owner = this._owner.get(); + if (!owner) { + return; } - this._owner.dismissSoftInput(); - this._owner._refreshHintState(this._owner.hint, textView.text); + if (owner.updateTextTrigger === enums.UpdateTextTrigger.focusLost) { + owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + } + + owner.dismissSoftInput(); + owner._refreshHintState(owner.hint, textView.text); } public textViewDidChange(textView: UITextView) { + let owner = this._owner.get(); + if (!owner) { + return; + } + var range = textView.selectedRange; - this._owner.style._updateTextDecoration(); + owner.style._updateTextDecoration(); textView.selectedRange = range; - if (this._owner.updateTextTrigger === enums.UpdateTextTrigger.textChanged) { - this._owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + if (owner.updateTextTrigger === enums.UpdateTextTrigger.textChanged) { + owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); } } } @@ -59,7 +74,7 @@ export class TextView extends common.TextView { if (!this._ios.font) { this._ios.font = UIFont.systemFontOfSize(12); } - this._delegate = UITextViewDelegateImpl.new().initWithOwner(this); + this._delegate = UITextViewDelegateImpl.initWithOwner(new WeakRef(this)); } public onLoaded() { From 6eb073c3b798dcffe305b45a1d68a21851a2e652 Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 10 Nov 2015 11:41:41 +0200 Subject: [PATCH 2/2] code improved --- ui/text-view/text-view.ios.ts | 47 ++++++++++++++++------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/ui/text-view/text-view.ios.ts b/ui/text-view/text-view.ios.ts index d35f10fac..1776480e4 100644 --- a/ui/text-view/text-view.ios.ts +++ b/ui/text-view/text-view.ios.ts @@ -6,6 +6,8 @@ import enums = require("ui/enums"); global.moduleMerge(common, exports); class UITextViewDelegateImpl extends NSObject implements UITextViewDelegate { + public static ObjCProtocols = [UITextViewDelegate]; + private _owner: WeakRef; public static initWithOwner(owner: WeakRef): UITextViewDelegateImpl { @@ -16,50 +18,43 @@ class UITextViewDelegateImpl extends NSObject implements UITextViewDelegate { public textViewShouldBeginEditing(textView: UITextView): boolean { let owner = this._owner.get(); - if (!owner) { - return; + if (owner) { + owner._hideHint(); } - - owner._hideHint(); + return true; } public textViewDidBeginEditing(textView: UITextView) { let owner = this._owner.get(); - if (!owner) { - return; + if (owner) { + owner.style._updateTextDecoration(); } - - owner.style._updateTextDecoration(); } public textViewDidEndEditing(textView: UITextView) { let owner = this._owner.get(); - if (!owner) { - return; - } + if (owner) { + if (owner.updateTextTrigger === enums.UpdateTextTrigger.focusLost) { + owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + } - if (owner.updateTextTrigger === enums.UpdateTextTrigger.focusLost) { - owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + owner.dismissSoftInput(); + owner._refreshHintState(owner.hint, textView.text); } - - owner.dismissSoftInput(); - owner._refreshHintState(owner.hint, textView.text); } public textViewDidChange(textView: UITextView) { let owner = this._owner.get(); - if (!owner) { - return; - } + if (owner) { + var range = textView.selectedRange; + owner.style._updateTextDecoration(); + textView.selectedRange = range; - var range = textView.selectedRange; - owner.style._updateTextDecoration(); - textView.selectedRange = range; - - if (owner.updateTextTrigger === enums.UpdateTextTrigger.textChanged) { - owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); - } + if (owner.updateTextTrigger === enums.UpdateTextTrigger.textChanged) { + owner._onPropertyChangedFromNative(textBase.TextBase.textProperty, textView.text); + } + } } }