UIKeyboard
のReturnキーをプログラムで有効または無効にする方法はありますか?私が見つけることができる最も近いものは enablesReturnKeyAutomatically
ですが、それはそれをまったく無効にするかどうかを伝えるだけです。
UIKeyboardオブジェクト自体を取得できる場合(SDKで公開されていないものですので、Appleは満足できない場合があります)、便利なsetReturnKeyEnabled:メンバー関数があります。
id keyboard = [self magicallyGetAUIKeyboardInstance];
[keyboard setReturnKeyEnabled: NO];
(経由 Erica Sadunのダンプ 2.2 iPhoneフレームワークの)
magicallyGetAUIKeyboardInstance
の実装について説明します ここ 。
次のコードセグメントが役立つ場合があります。
textfield.enablesReturnKeyAutomatically = YES;
これは、UITextInputTraitsのiPhone SDKで公開されています。これを使用すると、テキストフィールド内に入力テキストがない場合、リターンキーが無効になります
UITextField
のenablesReturnKeyAutomatically
プロパティは、Interface Builderで直接設定できます。テキストフィールドを選択して、属性インスペクターを開きます。 Tharinduが述べたように、これはテキストが入力されたかどうかに応じて自動的にリターンキーを有効または無効にします。
もちろん、コードでこれを変更する必要がある場合でも、nameTextField.enablesReturnKeyAutomatically = true
を使用してプログラムで設定できます。
ダウン投票に対処するための編集:
それ以外の場合、コマンドでリターンキーを有効または無効にする公式の方法はありません。これを実現するためにプライベートAPIを使用することはお勧めしません。あるいは、 textFieldShouldReturn:
デリゲートメソッドを使用して、条件/検証をそこに配置し、それに応じて応答することができます。
UITextField
のhasText
属性をオーバーライドして、これを実現できます。
_class CustomTextField : UITextField {
override public var hasText: Bool {
get {
return evaluateString(text)
}
}
}
_
ここで、evaluateString(_ text: String?) -> Bool
は、たとえば文字数など、必要な入力基準に対してチェックします。
もちろん、これはUITextField
に設定された_enablesReturnKeyAutomatically = true
_との組み合わせでのみ機能します。
私の答えはタイムリーでもObjective-Cでも書かれていませんが、他の場所で答えを見つけることができず、この質問が他のスレッドで定期的に参照されていることを考えると、ここが最高の場所だと思いますそれを投稿してください。
1つのファイルを作成して、どこからでもこのクラスにアクセスすることをお勧めします。コードは次のとおりです。
UIKeyboard.h
#import <UIKit/UIKit.h>
@interface UIApplication (KeyboardView)
- (UIView *)keyboardView;
@end
UIKeyboard.m
#import "UIKeyboard.h"
@implementation UIApplication (KeyboardView)
- (UIView *)keyboardView
{
NSArray *windows = [self windows];
for (UIWindow *window in [windows reverseObjectEnumerator])
{
for (UIView *view in [window subviews])
{
if (!strcmp(object_getClassName(view), "UIKeyboard"))
{
return view;
}
}
}
return nil;
}
@end
これで、独自のクラスからこのクラスをインポートしてアクセスできます。
#import "UIKeyboard.h"
// Keyboard Instance Pointer.
UIView *keyboardView = [[UIApplication sharedApplication] keyboardView];
このクラスの完全なドキュメントはこちらで見つけることができます:http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html =
ここで見つけることができる詳細情報:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard .html
UITextFieldを使用してみてください!この文字列を受信し、リターンよりもなくなっています!
文書化されたAPIから利用できるテクニックを次に示しますが、Enterキーが無効になっている場合は視覚的なフィードバックを提供しません。
- (void)setup {
// Or in init
self.textField.delegate = self;
}
// <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// substitute your test here
return [textField.text rangeOfString:@"@"].location != NSNotFound;
}
ここの他の答えは
[textField addTarget:self
action:@selector(validateTextField:)
forControlEvents:UIControlEventEditingChanged];
ユーザーが入力するときに動的な視覚的フィードバックを提供します。