【问题标题】:Hide the keyboard (blur) when clicking out of a textField inside a tableView in Titanium在 Titanium 中的 tableView 内单击 textField 时隐藏键盘(模糊)
【发布时间】:2013-04-12 04:46:22
【问题描述】:

我正在尝试在 Titanium 中获取一个表格,其中每一行都有一个静态文本和一个可以输入内容的 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)

【问题讨论】:

    标签: keyboard titanium tableview textfield blur


    【解决方案1】:

    我对您的代码进行了一些更改。请试试这个

    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(); }); 您的程序中的上述代码段不起作用,因为窗口的click 事件没有触发由于tableView 的高度,窗口被隐藏并且您的点击在tableView 上触发。如果您为 tableView 设置 backgroundColor 属性,您可以看到差异。所以我调整了 tableView 的高度,因此在窗口中触发了点击,键盘消失了。

    2. 创建 textField 数组:您可以在不创建 textField 数组的情况下执行相同操作,并且在 for loop 内您可以将 textField 创建为 var textField = Ti.UI.createTextField();。但是如果你这样做,你不能一直隐藏键盘,因为事件只会为最后一个 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
               }
          }
      }
      

    【讨论】:

    • 谢谢阿南德。这是一个很棒的解释!只是一个小细节。使用您的代码,表格以这种方式显示在屏幕中间并被键盘隐藏。因此,我将height : (tableAddObjectRowData.length * 45) + 60 更改为height : ((textFields.length + 1) * 45), top : "0",,如果我在表格下方单击(但例如在标题上没有),它现在可以工作并关闭键盘。您认为这是一个好的解决方案还是提出了不同的建议?我仍然不明白为什么我必须把桌子的高度放在模糊的工作上。
    • @jbssm:正如我在第 1 点中解释的那样,您的代码中的“窗口被 tableView 隐藏”所以我们必须调整 tableView 的高度。使用我的代码,仅当您单击窗口时键盘才会模糊。请尝试在设置tableView高度之前和之后的代码中为window和tableView设置不同的backgroundColor属性,你可以很容易理解...
    • 谢谢,backgroundColor 技巧非常有用,我现在明白是怎么回事了。
    • @jbssm:感谢您的评论。这是一个简单的错误。通常我们可能会错过它,并且会在这些简单的问题上浪费几个小时:D
    猜你喜欢
    • 2017-05-06
    • 2022-01-22
    • 2012-10-17
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多