確定キー以外の操作でキーボードを隠す

テキストフィールドで確定キー以外の操作によってキーボードを隠したいと思った。
例えばキャンセルボタンを押した場合や、他のコントロールにフォーカスを移した場合など。

やり方を探していたら該当するメソッドなどは見つからなかったが、テキストフィールドをいったんビューから削除して追加し直してやると期待通りの動作をした。
テキストフィールドの内容はクリアされないので、フォーム入力の途中で使っても問題ない。

cancelButton.addEventListener("click", ->
    win.remove(textField)
    win.add(textField)
)

でもなんかもっとスマートなやり方はないのだろうか。

画面遷移によっても消えるので、ケースによってはそれで間に合うかも。

サンプルコード

動作テストのためのサンプル。

app.coffee
win = Ti.UI.createWindow(title: "Keyboard Test")

cancelButton = Ti.UI.createButton(systemButton:Titanium.UI.iPhone.SystemButton.CANCEL)
win.setRightNavButton(cancelButton)

textField = Ti.UI.createTextField(
    color:'#336699'
    left:10
    top:10
    width:300
    height:40
    hintText:'テスト'
    keyboardType: Titanium.UI.KEYBOARD_DEFAULT
    returnKeyType: Titanium.UI.RETURNKEY_DONE
    borderStyle: Titanium.UI.INPUT_BORDERSTYLE_ROUNDED
    suppressReturn: true
)
win.add(textField)

cancelButton.addEventListener("click", ->
    win.remove(textField)
    win.add(textField)
)

win.hideTabBar()
win.showNavBar()

# タブはナビゲーションバーを使うためだけに定義
mainTab = Ti.UI.createTab(
    title: "Main"
    window: win
    #window: dateWin
)

tabGroup = Ti.UI.createTabGroup()
tabGroup.addTab(mainTab)
tabGroup.open()

CoffeeScriptなのでapp.jsにコンパイルしないと動かないです。
あと例によってAndroidでは試してません。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL