SOLVED :
import { Component, ViewChild} from '@angular/core';
import { Keyboard } from 'ionic-native';
@Component({
templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
@ViewChild('input') myInput ;
constructor() {}
ionViewDidLoad() {
setTimeout(() => {
Keyboard.show() // for android
this.myInput.setFocus();
},150);
}
}
1) import "ViewChild"
import {Component, ViewChild} from '@angular/core';
2) Create a reference to your input in your html template :
<ion-input #focusInput></ion-input>
3) Use @ViewChild to get access to the input component you just referenced previously.
@ViewChild('focusInput') myInput ;
4) Trigger the focus
Use the ionViewLoaded() method to trigger it each time the view/page is loaded.
setTimeout is needed
ionViewLoaded() {
setTimeout(() => {
Keyboard.show() // for android
this.myInput.setFocus();
},150); //a least 150ms.
}
4) Show the keyboard on Android
import { Keyboard } from 'ionic-native';
Call Keyboard.show() to call the keyboard on Android.
5) Show the keyboard on iOS
add this line to your config.xml to make it work on iOS :
<preference name="KeyboardDisplayRequiresUserAction" value="false" />
With the help from the great article of mhartington : http://mhartington.io/post/setting-input-focus/
You don't need to import the 'Input' from 'angular/core'.
Simply:
And answering comment to Ciprian Mocanu:
It works on iOS -> checked on iPhone 6 PLUS with iOS 10
I think you should make a global directive for this as you will probably want this behavior more than once.
Now on you
ion-input
field just add theautofocus
attributeI found this solution to also fix the problem that the keyboard is pushing the content away.
None of the above was working for me. Here is how I resolved:
Then in your ion-input field just add the autofocus attribute:
Tested on Browser and Android not IOS yet but no reason it should not work.
For IOS and Android its fine working for me. put focus code in ionViewWillEnter().
Input tag in html file
And add this line to your config.xml to make it work on iOS :