未为具有可编辑="false" 的文本字段触发单击处理程序
Click handler not triggered for textfield with editable="false"
此代码一直有效,直到 SDK 的最新更新之一。现在它仅适用于 iOS - 而不适用于 Android(API 版本 19-23 已测试)。
Alloy 片段:
<ScrollView id="form" onClick="clickHandler" onFocus="clickHandler">
:
:
<View class="formRow" id="clubRow1">
<Label id="label_club" />
<TextField id="club1" class="club" editable="false" bubbleParent="true"></TextField>
</View>
控制器片段:
function clickHandler(e){
console.trace('profile.clickHandler: ' + (e.source.id || 'no id!'));
if(e && e.source){
:
:
我使用顶级点击处理程序(如果我在 <TextField>
上有点击处理程序,结果是一样的)。如果我删除 editable="false"
然后点击处理程序被触发。
我使用此功能向用户显示他们可以 select 来自的值列表(来自具有搜索功能的列表视图或来自简单的选项列表,如果只有几个值)。
有什么办法可以让我再次获得这个功能吗?这是 SDK 中的错误 - 或者只是我做了一些尴尬的事情来获得功能?
环境:
Operating System
Name = Mac OS X
Version = 10.12.1
Architecture = 64bit
# CPUs = 8
Memory = 16.0GB
Node.js
Node.js Version = 4.5.0
npm Version = 2.15.9
Appcelerator CLI
Installer = 4.2.7
Core Package = 5.5.1
Titanium CLI
CLI Version = 5.0.9
node-appc Version = 0.2.31
Titanium SDKs
5.5.0.GA
Version = 5.5.0
Install Location = /Users/jda/Library/Application Support/Titanium/mobilesdk/osx/5.5.0.GA
Platforms = android, mobileweb, iphone
git Hash = 44a2e3f
git Timestamp = 09/13/16 12:38
node-appc Version = 0.2.36
另一位开发人员在 Ti.Slack (@baharroth) 上告诉我,这显然是 a known bug。只需将其添加到此处以供其他人查找。
可以通过使用例如onTouchEnd
或 onSimpleTouch
。然而,一个更好的解决方案(在我看来)是为 <TextField>
设置 focusable="false"
和 editable="true"
- 但仅针对 Android。对于 iOS 它仍然必须是 editable="false"
所以最好的实现方式是这样的:
在app.tss中:
".pickList[platform=android]": {
focusable:false,
editable:true
}
".pickList[platform=ios]": {
editable:false
}
并且在 Alloy 标记文件中:
<TextField id="country" class="pickList" bubbleParent="true"></TextField>
这似乎工作正常(对于我的情况,无论如何)。
此代码一直有效,直到 SDK 的最新更新之一。现在它仅适用于 iOS - 而不适用于 Android(API 版本 19-23 已测试)。
Alloy 片段:
<ScrollView id="form" onClick="clickHandler" onFocus="clickHandler">
:
:
<View class="formRow" id="clubRow1">
<Label id="label_club" />
<TextField id="club1" class="club" editable="false" bubbleParent="true"></TextField>
</View>
控制器片段:
function clickHandler(e){
console.trace('profile.clickHandler: ' + (e.source.id || 'no id!'));
if(e && e.source){
:
:
我使用顶级点击处理程序(如果我在 <TextField>
上有点击处理程序,结果是一样的)。如果我删除 editable="false"
然后点击处理程序被触发。
我使用此功能向用户显示他们可以 select 来自的值列表(来自具有搜索功能的列表视图或来自简单的选项列表,如果只有几个值)。
有什么办法可以让我再次获得这个功能吗?这是 SDK 中的错误 - 或者只是我做了一些尴尬的事情来获得功能?
环境:
Operating System
Name = Mac OS X
Version = 10.12.1
Architecture = 64bit
# CPUs = 8
Memory = 16.0GB
Node.js
Node.js Version = 4.5.0
npm Version = 2.15.9
Appcelerator CLI
Installer = 4.2.7
Core Package = 5.5.1
Titanium CLI
CLI Version = 5.0.9
node-appc Version = 0.2.31
Titanium SDKs
5.5.0.GA
Version = 5.5.0
Install Location = /Users/jda/Library/Application Support/Titanium/mobilesdk/osx/5.5.0.GA
Platforms = android, mobileweb, iphone
git Hash = 44a2e3f
git Timestamp = 09/13/16 12:38
node-appc Version = 0.2.36
另一位开发人员在 Ti.Slack (@baharroth) 上告诉我,这显然是 a known bug。只需将其添加到此处以供其他人查找。
可以通过使用例如onTouchEnd
或 onSimpleTouch
。然而,一个更好的解决方案(在我看来)是为 <TextField>
设置 focusable="false"
和 editable="true"
- 但仅针对 Android。对于 iOS 它仍然必须是 editable="false"
所以最好的实现方式是这样的:
在app.tss中:
".pickList[platform=android]": {
focusable:false,
editable:true
}
".pickList[platform=ios]": {
editable:false
}
并且在 Alloy 标记文件中:
<TextField id="country" class="pickList" bubbleParent="true"></TextField>
这似乎工作正常(对于我的情况,无论如何)。