web-dev-qa-db-ja.com

iPhone / iPad:UITextFieldを読み取り専用にする方法(無効にしない)?

この質問は以前に行われたことがあることは理解していますが、回答を無効にするなど、満足できません。基本的な違いがあります。無効なビューはイベントを発生させませんが、読み取り専用ビューの場合は、(TouchUpInsideなど)のようなイベントを発生させる必要があり、必要です。私が欲しくないのはキーボード入力だけです。

その理由は、いくつかの入力フィールドがあり、UITextFieldを直接使用できるものと、使用できないものがあるためです。それらを同じように見せたいです。そこで、UITextFieldを使用してそれらすべてを表示したいと思います。それらのいくつかは、代替入力にタッチアップイベントを使用できるように、読み取り専用である必要があります。

それとも、まったく異なる方法があるのでしょうか?

編集:これは私のMonoTouchプロジェクト用です。私はObjective-cについての知識が非常に限られています。

18
newman

InterfaceBuilderで作成したテキストフィールドに接続された2つのテキストフィールドインスタンス変数があるとします。それらをmyReadOnlyTextFieldおよびmyEditableTextFieldと呼びましょう。 InterfaceBuilderの各テキストフィールドのdelegateプロパティをViewController(「ファイルの所有者」)に接続していることを確認してください[1]。ここで、ビューコントローラー_@implementation_(。mファイル)で、メソッド_textFieldShouldBeginEditing:_を使用し、いくつかのロジックを入力して、編集を許可するテキストフィールドと編集を許可しないテキストフィールドを決定します。このようなもの:

_- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    BOOL editable;
    if (textField == myReadOnlyTextField) {
        editable = NO;
    } else if (textField == myEditableTextField) {
        editable = YES;
    } else {
        // editable = YES/NO/Other Logic
    }
    return editable;
}
_

UITextFieldDelegate Documentation から:

_textFieldShouldBeginEditing:_
指定されたテキストフィールドで編集を開始するかどうかを代理人に尋ねます。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

パラメータ
textField-編集を開始しようとしているテキストフィールド。

戻り値
YES編集セッションを開始する必要がある場合。それ以外の場合は、NOを使用して編集を禁止します。

ディスカッション
ユーザーが通常は編集セッションを開始するアクションを実行すると、テキストフィールドは最初にこのメソッドを呼び出して、編集を実際に続行する必要があるかどうかを確認します。ほとんどの場合、編集を続行するには、このメソッドからYESを返すだけです。

デリゲートによるこのメソッドの実装はオプションです。存在しない場合、編集はこのメソッドがYESを返したかのように進行します。

UITextField Documentation も参考になります。


[1] プログラムでこれを行うこともできます。次に例を示します。

_- (void)viewDidLoad {
    [super viewDidLoad];
    // .....
    myReadOnlyTextField.delegate = self;
    myEditableTextField.delegate = self;
}
_
29
chown

キーボードは不要ですが、textField:shouldChangeCharactersInRange:replacementString:は非常に便利です。テキストフィールドの編集を防ぎますが、textFieldShouldBeginEditing:とは対照的に選択可能なままにします。

モノタッチの場合:

var txt = new UITextField();
txt.ShouldChangeCharacters += (field, range, replacementString) => false;
15
m8labs

次の2つのオプションがあります。a)falseを返すShouldBeginEditingを使用するが、テキストフィールドのInputViewとしてPickerViewを使用することはできません。 b)編集はできないがPickerViewでInputViewを使用できるようにするShouldChangeCharactersを使用する。

3
Peter Bournakas

monoTouchで作業しているため、次のコード行を使用できます。

myReadOnlyButton.ShouldBeginEditing = t =>
{
  //event code
  return false;
};
1
Menno Luimstra

目的C:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

  return NO;
}

スイフト:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

  return false
}
1
Vinoth kanna