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