我正在尝试在Titanium中获取一个表,其中每行都有一个静态文本和一个textField,我可以在其中输入内容。
所以我去创建一个行,左边的部分是静态文本,右边部分是我的输入文本字段。 只是一个小问题,我不能通过点击它外面来隐藏键盘。
如果它是表格外的普通textField,我只会使用blur方法,但在这种情况下我无法使用它。
这是我的代码到目前为止: 关于它如何工作以及该解决方案是否适用于iOS和Android的任何想法?
var winAddObjectView = Titanium.UI.currentWindow;
var tableAddObjectData = [
{title:'name', hintText:'item name (optional)'},
{title:'track no.', hintText:'object tracking code'}
];
var tableAddObjectRowData = [];
for (var i = 0; i < tableAddObjectData.length; i++) {
var title = Ti.UI.createLabel({
text:tableAddObjectData[i].title,
textAlign:"right",
left:"20",
height:'auto',
width:'68',
color:'#526691',
font:{fontSize:12, fontWeight:'bold'},
});
var textField = Ti.UI.createTextField({
hintText:tableAddObjectData[i].hintText,
textAlign:"left",
left:"96",
height:'auto',
width:'184',
color:'#4C4C4C',
font:{fontSize:12, fontWeight:'bold'},
});
winAddObjectView.addEventListener("click", function(e){
textField.blur();
});
var row = Ti.UI.createTableViewRow({
height:"45",
});
row.add(title);
row.add(textField);
tableAddObjectRowData.push(row);
}
var tableAddObjectView = Ti.UI.createTableView({
headerTitle:'Enter Tracking Information',
style:Titanium.UI.iPhone.TableViewStyle.GROUPED,
backgroundColor:'transparent',
data:tableAddObjectRowData,
});
winAddObjectView.add(tableAddObjectView)
答案 0 :(得分:2)
我在代码中做了一些更改。请试试这个
var tableAddObjectRowData = [];
var textFields = []; //Created an array of textFields
for (var i = 0; i < tableAddObjectData.length; i++) {
var title = Ti.UI.createLabel({
text:tableAddObjectData[i].title,
textAlign:"right",
left:"20",
height:'auto',
width:'68',
color:'#526691',
font:{fontSize:12, fontWeight:'bold'},
});
textFields[i] = Ti.UI.createTextField({ //Creating the textField
hintText:tableAddObjectData[i].hintText,
textAlign:"left",
left:"96",
height:'auto',
width:'184',
color:'#4C4C4C',
font:{fontSize:12, fontWeight:'bold'},
});
var row = Ti.UI.createTableViewRow({
height:"45",
});
row.add(title);
row.add(textFields[i]);
tableAddObjectRowData.push(row);
}
var tableAddObjectView = Ti.UI.createTableView({
headerTitle:'Enter Tracking Information',
style:Titanium.UI.iPhone.TableViewStyle.GROUPED,
backgroundColor:'transparent',
data:tableAddObjectRowData,
height : (tableAddObjectRowData.length * 45) + 60 //Added the height property for the tableView
});
winAddObjectView.addEventListener("click", hideSoftKeyboard); //added event listener to the window, moved this to out of the loop
function hideSoftKeyboard(){ //Added function to hide the keyboard
for(var i=0; i<textFields.length; i++){
textFields[i].blur(); //Hiding each keyboards
}
}
winAddObjectView.add(tableAddObjectView);
<强>解释强>
winAddObjectView.addEventListener("click", function(e){
textField.blur();
});
程序中的上述代码段无效,因为由于tableView的高度,窗口的click
事件未触发,窗口被隐藏,并且您的点击在tableView上触发< / strong>即可。如果为tableView设置backgroundColor
属性,则可以看到差异。所以我调整了tableView的高度,因此在窗口中触发了点击,键盘也消失了。
创建textField数组:您可以在不创建textField数组的情况下执行相同操作,在for loop
内可以将textField创建为var textField = Ti.UI.createTextField();
。但是如果你这样做,你就无法一直隐藏keayboard,因为事件将仅针对最后一个textField触发。因此我创建了textField数组
对于Android
,您还可以使用Ti.UI.android.hideSoftKeybaord()方法。为此,只需更改代码中的hideSoftkeyboard()
方法,如下所示
function hideSoftKeyboard(){ //Added function to hide the keyboard
if(Ti.Platform.osname === 'android'){
Ti.UI.Android.hideSoftKeyboard();
} else {
for(var i=0; i<textFields.length; i++){
textFields[i].blur(); //Hiding each keayboards
}
}
}