单击Titanium中的tableView内的textField时隐藏键盘(模糊)

时间:2013-04-18 21:45:14

标签: keyboard titanium tableview textfield blur

我正在尝试在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)

1 个答案:

答案 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);

<强>解释

  1. winAddObjectView.addEventListener("click", function(e){ textField.blur(); }); 程序中的上述代码段无效,因为由于tableView的高度,窗口的click事件未触发,窗口被隐藏,并且您的点击在tableView上触发< / strong>即可。如果为tableView设置backgroundColor属性,则可以看到差异。所以我调整了tableView的高度,因此在窗口中触发了点击,键盘也消失了。

  2. 创建textField数组:您可以在不创建textField数组的情况下执行相同操作,在for loop内可以将textField创建为var textField = Ti.UI.createTextField();。但是如果你这样做,你就无法一直隐藏keayboard,因为事件将仅针对最后一个textField触发。因此我创建了textField数组

  3. 对于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
             }
        }
    }