Skip to content

Commit 15704c3

Browse files
authored
Merge pull request #3498 from zilongshanren/improve-editbox-touch-handling
Improve editbox touch handling
2 parents 774e89a + 6b316e9 commit 15704c3

File tree

1 file changed

+49
-17
lines changed

1 file changed

+49
-17
lines changed

extensions/editbox/CCEditBox.js

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,14 @@ cc.EditBoxDelegate = cc.Class.extend({
154154
* This method is called when an edit box gains focus after keyboard is shown.
155155
* @param {cc.EditBox} sender
156156
*/
157-
editBoxEditingDidBegan: function (sender) {
157+
editBoxEditingDidBegin: function (sender) {
158158
},
159159

160160
/**
161161
* This method is called when an edit box loses focus after keyboard is hidden.
162162
* @param {cc.EditBox} sender
163163
*/
164-
editBoxEditingDidEnded: function (sender) {
164+
editBoxEditingDidEnd: function (sender) {
165165
},
166166

167167
/**
@@ -176,7 +176,7 @@ cc.EditBoxDelegate = cc.Class.extend({
176176
* This method is called when the return button was pressed.
177177
* @param {cc.EditBox} sender
178178
*/
179-
editBoxEditingReturn: function (sender) {
179+
editBoxReturn: function (sender) {
180180
}
181181
});
182182

@@ -219,6 +219,8 @@ cc.EditBox = cc.Node.extend({
219219
_placeholderFontSize: 14,
220220
_placeholderColor: null,
221221
_className: 'EditBox',
222+
_touchListener: null,
223+
_touchEnabled: true,
222224

223225
/**
224226
* constructor of cc.EditBox
@@ -238,16 +240,29 @@ cc.EditBox = cc.Node.extend({
238240
this.createDomElementIfNeeded();
239241
this.initWithSizeAndBackgroundSprite(size, normal9SpriteBg);
240242

241-
cc.eventManager.addListener({
243+
this._touchListener = cc.EventListener.create({
242244
event: cc.EventListener.TOUCH_ONE_BY_ONE,
243245
swallowTouches: true,
244246
onTouchBegan: this._onTouchBegan.bind(this),
245247
onTouchEnded: this._onTouchEnded.bind(this)
246-
}, this);
248+
});
249+
cc.eventManager.addListener(this._touchListener, this);
247250

248251
this.setInputFlag(this._editBoxInputFlag);
249252
},
250253

254+
setTouchEnabled: function (enable) {
255+
if (this._touchEnabled === enable) {
256+
return;
257+
}
258+
this._touchEnabled = enable;
259+
if (this._touchEnabled) {
260+
cc.eventManager.addListener(this._touchListener, this);
261+
} else {
262+
cc.eventManager.removeListener(this._touchListener);
263+
}
264+
},
265+
251266
_createRenderCmd: function () {
252267
if (cc._renderType === cc.game.RENDER_TYPE_CANVAS) {
253268
return new cc.EditBox.CanvasRenderCmd(this);
@@ -317,7 +332,21 @@ cc.EditBox = cc.Node.extend({
317332
this._renderCmd._removeDomFromGameContainer();
318333
},
319334

335+
_isAncestorsVisible: function (node) {
336+
if (null == node)
337+
return true;
338+
339+
var parent = node.getParent();
340+
341+
if (parent && !parent.isVisible())
342+
return false;
343+
return this._isAncestorsVisible(parent);
344+
},
345+
320346
_onTouchBegan: function (touch) {
347+
if (!this.isVisible() || !this._isAncestorsVisible(this)) {
348+
return;
349+
}
321350
var touchPoint = touch.getLocation();
322351
var bb = cc.rect(0, 0, this._contentSize.width, this._contentSize.height);
323352
var hitted = cc.rectContainsPoint(bb, this.convertToNodeSpace(touchPoint));
@@ -331,6 +360,9 @@ cc.EditBox = cc.Node.extend({
331360
},
332361

333362
_onTouchEnded: function () {
363+
if (!this.isVisible() || !this._isAncestorsVisible(this)) {
364+
return;
365+
}
334366
this._renderCmd._beginEditing();
335367
},
336368

@@ -871,8 +903,8 @@ cc.EditBox.create = function (size, normal9SpriteBg, press9SpriteBg, disabled9Sp
871903
thisPointer._updateDomTextCases();
872904

873905
thisPointer._endEditing();
874-
if (editBox._delegate && editBox._delegate.editBoxEditingReturn) {
875-
editBox._delegate.editBoxEditingReturn(editBox);
906+
if (editBox._delegate && editBox._delegate.editBoxReturn) {
907+
editBox._delegate.editBoxReturn(editBox);
876908
}
877909
cc._canvas.focus();
878910
}
@@ -888,17 +920,17 @@ cc.EditBox.create = function (size, normal9SpriteBg, press9SpriteBg, disabled9Sp
888920
thisPointer._onFocusOnMobile(editBox);
889921
}
890922

891-
if (editBox._delegate && editBox._delegate.editBoxEditingDidBegan) {
892-
editBox._delegate.editBoxEditingDidBegan(editBox);
923+
if (editBox._delegate && editBox._delegate.editBoxEditingDidBegin) {
924+
editBox._delegate.editBoxEditingDidBegin(editBox);
893925
}
894926
});
895927
tmpEdTxt.addEventListener('blur', function () {
896928
var editBox = thisPointer._editBox;
897929
editBox._text = this.value;
898930
thisPointer._updateDomTextCases();
899931

900-
if (editBox._delegate && editBox._delegate.editBoxEditingDidEnded) {
901-
editBox._delegate.editBoxEditingDidEnded(editBox);
932+
if (editBox._delegate && editBox._delegate.editBoxEditingDidEnd) {
933+
editBox._delegate.editBoxEditingDidEnd(editBox);
902934
}
903935

904936
if (this.value === '') {
@@ -962,8 +994,8 @@ cc.EditBox.create = function (size, normal9SpriteBg, press9SpriteBg, disabled9Sp
962994
thisPointer._onFocusOnMobile(editBox);
963995
}
964996

965-
if (editBox._delegate && editBox._delegate.editBoxEditingDidBegan) {
966-
editBox._delegate.editBoxEditingDidBegan(editBox);
997+
if (editBox._delegate && editBox._delegate.editBoxEditingDidBegin) {
998+
editBox._delegate.editBoxEditingDidBegin(editBox);
967999
}
9681000

9691001
});
@@ -973,8 +1005,8 @@ cc.EditBox.create = function (size, normal9SpriteBg, press9SpriteBg, disabled9Sp
9731005
if (e.keyCode === cc.KEY.enter) {
9741006
e.stopPropagation();
9751007

976-
if (editBox._delegate && editBox._delegate.editBoxEditingReturn) {
977-
editBox._delegate.editBoxEditingReturn(editBox);
1008+
if (editBox._delegate && editBox._delegate.editBoxReturn) {
1009+
editBox._delegate.editBoxReturn(editBox);
9781010
}
9791011
}
9801012
});
@@ -983,8 +1015,8 @@ cc.EditBox.create = function (size, normal9SpriteBg, press9SpriteBg, disabled9Sp
9831015
editBox._text = this.value;
9841016
thisPointer._updateDomTextCases();
9851017

986-
if (editBox._delegate && editBox._delegate.editBoxEditingDidEnded) {
987-
editBox._delegate.editBoxEditingDidEnded(editBox);
1018+
if (editBox._delegate && editBox._delegate.editBoxEditingDidEnd) {
1019+
editBox._delegate.editBoxEditingDidEnd(editBox);
9881020
}
9891021

9901022
if (this.value === '') {

0 commit comments

Comments
 (0)