web-dev-qa-db-ja.com

UITextFieldのリターンキーを無効/有効にする方法は?

UIKeyboardのReturnキーをプログラムで有効または無効にする方法はありますか?私が見つけることができる最も近いものは enablesReturnKeyAutomatically ですが、それはそれをまったく無効にするかどうかを伝えるだけです。

65
Sophie Alpert

UIKeyboardオブジェクト自体を取得できる場合(SDKで公開されていないものですので、Appleは満足できない場合があります)、便利なsetReturnKeyEnabled:メンバー関数があります。

id keyboard = [self magicallyGetAUIKeyboardInstance];
[keyboard setReturnKeyEnabled: NO];

(経由 Erica Sadunのダンプ 2.2 iPhoneフレームワークの)

magicallyGetAUIKeyboardInstanceの実装について説明します ここ

24
Elliot Kroo

次のコードセグメントが役立つ場合があります。

textfield.enablesReturnKeyAutomatically = YES;

これは、UITextInputTraitsのiPhone SDKで公開されています。これを使用すると、テキストフィールド内に入力テキストがない場合、リターンキーが無効になります

74

UITextFieldenablesReturnKeyAutomaticallyプロパティは、Interface Builderで直接設定できます。テキストフィールドを選択して、属性インスペクターを開きます。 Tharinduが述べたように、これはテキストが入力されたかどうかに応じて自動的にリターンキーを有効または無効にします。

enter image description here

もちろん、コードでこれを変更する必要がある場合でも、nameTextField.enablesReturnKeyAutomatically = trueを使用してプログラムで設定できます。

ダウン投票に対処するための編集:

それ以外の場合、コマンドでリターンキーを有効または無効にする公式の方法はありません。これを実現するためにプライベートAPIを使用することはお勧めしません。あるいは、 textFieldShouldReturn: デリゲートメソッドを使用して、条件/検証をそこに配置し、それに応じて応答することができます。

25
Kyle Clegg

UITextFieldhasText属性をオーバーライドして、これを実現できます。

_class CustomTextField : UITextField {
    override public var hasText: Bool {
        get {
            return evaluateString(text)
        }
    }
}
_

ここで、evaluateString(_ text: String?) -> Boolは、たとえば文字数など、必要な入力基準に対してチェックします。

もちろん、これはUITextFieldに設定された_enablesReturnKeyAutomatically = true_との組み合わせでのみ機能します。

私の答えはタイムリーでもObjective-Cでも書かれていませんが、他の場所で答えを見つけることができず、この質問が他のスレッドで定期的に参照されていることを考えると、ここが最高の場所だと思いますそれを投稿してください。

18
Janne

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を使用してみてください!この文字列を受信し、リターンよりもなくなっています!

0
Jean Luiz

文書化された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];

ユーザーが入力するときに動的な視覚的フィードバックを提供します。

0
Rik Renich