0

在我的钛应用程序中,我有一个带有很多字段(textfield等等)的窗体,当我专注于textfield时,它显示了ios键盘,当我点击窗口上的某个地方时,我想隐藏它:在ios钛上隐藏键盘

<Alloy> 
    <Window id="home" > 
    <View id="form"> 
     <Require type="view" id="myViewForm" src="form/etape_1" /> 
    </View> 
    </Window> 
</Alloy> 

内myViewForm:

<Alloy> 
    <View> 
     <TextField id="name" hintText="name"/> 
     <TextField id="telephone" hintText="Téléphone"/> 
    </View> 
</Alloy> 

注:正如你看到的,我有ID为 “电话”,将只显示号码一个文本框。

我控制器主页文件:

/*----------------------------------------- 
| | EVENT LISTENER CLICK ON WINDOW 
-------------------------------------------*/ 
$.home.addEventListener("click", hideSoftKeyboard); 
/*----------------------------------------- 
| | HIDE KEYBOARD 
-------------------------------------------*/ 
function hideSoftKeyboard(e){ 
    if(Ti.Platform.osname === 'android'){ 
     Ti.UI.Android.hideSoftKeyboard(); 
    } else { 
     $.home.textField.blur(); 
    } 
} 

Android上的效果很好,但在iOS上我有以下错误:

[ERROR] : Script Error { 
[ERROR] :  column = 103; 
[ERROR] :  line = 12; 
[ERROR] :  message = "undefined is not an object (evaluating '$.home.textField.blur')"; 
[ERROR] :  stack = hideSoftKeyboard; 
[ERROR] : } 

有人可以帮助我吗?谢谢。

回答

2

这里是你的代码:

index.js

$.home.addEventListener("click", hideSoftKeyboard); 

$.home.open(); 

function hideSoftKeyboard(e){ 
    if(OS_ANDROID){ 
     Ti.UI.Android.hideSoftKeyboard(); 
    } else { 
     $.myViewForm.name.blur(); 
     $.myViewForm.telephone.blur(); 
    } 
} 
  • 还要记住,如果你不设置 bubbleParent="false"文本字段,那么你的点击只要您点击文本字段,窗口上的事件就会被激活。
  • 所以在整个窗口上使用click事件要小心。
  • 如果您在窗口上使用点击事件的目的仅仅是使用电话布局键盘在iOS上隐藏键盘,那么我会建议您看看这个属性TextField keyboardToolbar,这将有助于您的目的。

这里是隐藏电话键盘的完整的跨平台代码。

index.js

$.home.open(); 

myViewForm.xml

<Alloy> 
    <View layout='vertical'> 
     <TextField id="MOBILE_FIELD" class="phone fields" platform="android" /> 

     <TextField id="MOBILE_FIELD" class="phone fields" platform="ios"> 
      <KeyboardToolbar> 
       <Toolbar> 
        <Items> 
         <FlexSpace /> 
         <Button title="DONE" onClick="hideKeyboard" />  
        </Items> 
       </Toolbar> 
      </KeyboardToolbar> 
     </TextField> 
    </View> 
</Alloy> 

myViewForm。TSS

// to accept only phone numbers, with + sign also.. 
".phone[platform=ios]" : { 
    keyboardType : Ti.UI.KEYBOARD_TYPE_NUMBER_PAD, 
} 

".phone[platform=android]" : { 
    inputType : [Ti.UI.INPUT_TYPE_CLASS_NUMBER] 
} 


".fields" : { 
    top : 30 
    width : '80%', 
    height : 50, 
    borderColor : 'black', 
    borderWidth : 2 
} 

myViewForm.js

function hideKeyboard() { 
    $.MOBILE_FIELD.blur(); 
} 
+0

嘿,非常感谢你,你的回答和例子非常清楚,所以我必须重复在我的表单上需要每个字段? – user44321

-2

$.myViewForm('name').blur(); 
$.myViewForm('telephone').blur(); 

尝试代替$.home.textField.blur();

$.myViewForm('name')将获得ID name认为这将是你的文本框,然后你可以调用blur()方法上。

希望这会帮助你。

+0

我们不能访问元素的ID这种方式,但其相当略有不同。 它应该是这样的:$ .myViewForm.name.blur(); \t \t $ .myViewForm.telephone.blur(); –

+0

你好,你的回复对我来说非常有用,感谢你的时代,所以你们所有人的意思是,如果我的表单上有很多字段,我必须手动完成。 – user44321

+0

@ user44321是的,你必须为iOS手动执行此操作。如果您发现任何答案有帮助,请将其标记为已接受,并做出积极评价,这对其他用户也有帮助。 :) – Swanand