我想在Titanium中获得一个表,其中每行都有一个静态文本和一个textField,我可以在其中输入一些东西。
我创建了一行左边是静态文本右边是输入文本域。只是个小问题,我无法通过点击键盘的外部来隐藏键盘。
如果它是一个普通的textField外的表,我只会使用模糊方法,但在这种情况下,我不能得到它的工作。
这是我到目前为止的代码:这是如何工作的,如果解决方案是有效的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)
我在你的代码中做了一些改变。请试试这个
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(); });
上面的代码段在你的程序没有工作,因为click
事件的窗口没有触发由于tableView的高度,窗口被隐藏,你的点击在tableView上触发。如果你为tableView设置backgroundColor
属性,你可以看到区别。所以我调整了tableView的高度因此点击在窗口中触发键盘消失了创建textField数组:您可以在不创建textField数组的情况下做同样的事情,并且在
for loop
中您可以将textField创建为var textField = Ti.UI.createTextField();
。但是如果你这样做,你不能隐藏键盘所有的时间,因为事件将为最后一个textField被触发。因此,我创建了textField数组对于
Android
,您也可以使用ti . ui .android. hidesoftkeyboard()方法。为此,只需在代码中更改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 } } }