この質問は以前に行われたことがあることは理解していますが、回答を無効にするなど、満足できません。基本的な違いがあります。無効なビューはイベントを発生させませんが、読み取り専用ビューの場合は、(TouchUpInsideなど)のようなイベントを発生させる必要があり、必要です。私が欲しくないのはキーボード入力だけです。
その理由は、いくつかの入力フィールドがあり、UITextField
を直接使用できるものと、使用できないものがあるためです。それらを同じように見せたいです。そこで、UITextField
を使用してそれらすべてを表示したいと思います。それらのいくつかは、代替入力にタッチアップイベントを使用できるように、読み取り専用である必要があります。
それとも、まったく異なる方法があるのでしょうか?
編集:これは私のMonoTouchプロジェクト用です。私はObjective-cについての知識が非常に限られています。
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;
}
_
キーボードは不要ですが、textField:shouldChangeCharactersInRange:replacementString:
は非常に便利です。テキストフィールドの編集を防ぎますが、textFieldShouldBeginEditing:
とは対照的に選択可能なままにします。
モノタッチの場合:
var txt = new UITextField();
txt.ShouldChangeCharacters += (field, range, replacementString) => false;
次の2つのオプションがあります。a)falseを返すShouldBeginEditingを使用するが、テキストフィールドのInputViewとしてPickerViewを使用することはできません。 b)編集はできないがPickerViewでInputViewを使用できるようにするShouldChangeCharactersを使用する。
monoTouchで作業しているため、次のコード行を使用できます。
myReadOnlyButton.ShouldBeginEditing = t =>
{
//event code
return false;
};
目的C:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO;
}
スイフト:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}