テキスト ビューに数値を入力するためにアプリにテンキーを配置しましたが、数値を入力するにはテキスト ビューをクリックする必要があります。そうすると、通常のキーボードが表示されますが、これは望ましくありません。
キーボードを完全に無効にするにはどうすればよいですか? どんな助けでも大歓迎です。
テキスト ビューに数値を入力するためにアプリにテンキーを配置しましたが、数値を入力するにはテキスト ビューをクリックする必要があります。そうすると、通常のキーボードが表示されますが、これは望ましくありません。
キーボードを完全に無効にするにはどうすればよいですか? どんな助けでも大歓迎です。
UITextField の inputView プロパティはデフォルトで nil です。これは、標準キーボードが表示されることを意味します。
カスタム入力ビューまたは単なるダミー ビューを割り当てると、キーボードは表示されませんが、点滅するカーソルは引き続き表示されます。
UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
myTextField.inputView = dummyView; // Hide keyboard, but show blinking cursor
キーボードと点滅カーソルの両方を非表示にする場合は、次の方法を使用します。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO; // Hide both keyboard and blinking cursor.
}
UITextFieldの場合は、そのenabled
プロパティをNOに設定できます。
UITextViewの場合は-textViewShouldBeginEditing:
、デリゲートに実装してNOを返すことができるため、編集が開始されることはありません。または、サブクラス化してオーバーライド-canBecomeFirstResponder
し、NOを返すこともできます。または、その編集動作を利用して、テキストビューとして使用するビューに数値ボタンを配置することもできますinputView
。これにより、テキストビューの編集時にボタンが表示されるはずです。それはあなたが望むものかもしれないし、そうでないかもしれません。
既存のボタンがどのように機能しているかによっては、ボタンが壊れることがありますが、キーボードが表示されないようにして、textViewの編集可能なプロパティをNOに設定することができます。
myTextView.editable = NO
同じビューに2つのテキストフィールドがある場合、同じ問題があります。私の目的は、1 つのテキストフィールドにデフォルトのキーボードを表示し、2 番目に非表示にして、代わりにドロップダウン リストを表示することでした。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
メソッドは、2つのテキストフィールドで期待どおりに機能しませんでした.私が見つけた唯一の回避策は
UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
myTextField.inputView = dummyView;
myTextField.inputAccessoryView = dummyView;
myTextField.tintColor = myTextField.backgroundColor; //to hide a blinking cursor
これにより、ターゲットのテキスト フィールド (私の場合はDropDownList ) のキーボードが完全に非表示になり、ユーザーが 2 番目のテキスト フィールド (スクリーンショットのアカウント番号) に切り替えると、デフォルトのキーボードが表示されます。
Xcode 8.2では、状態の「有効」オプションのチェックを外すことで簡単に実行できます。
または、コードで実行したい場合。このテキスト フィールドの @IBOutlet を作成し、名前を付けてから、この変数名を viewDidLoad 関数 (または、意図する場合は任意のカスタム関数) で次のように使用できます (Swift 3.0.1 の場合):
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
myTextField.isEditable = false
}