3

私のアプリの UITextFields には (Interface Builder で) 定義されたプレースホルダー テキストがあり、プレースホルダー テキストが占める領域をタップしても、これらのフィールドにフォーカスを取得できません (つまり、キーボードを表示して編集を許可します)。プレースホルダー テキストのすぐ外側の領域のテキスト フィールドをタップすると (ただし、テキスト ファイル自体の境界内にあります)、通常どおりに動作します (つまり、キーボードがポップアップし、テキスト フィールドの内容を編集できます)。どうすればこれを修正できますか?

ありがとう。

編集1

わかりました、私はそれを手に入れたと思います。また、これらの UITextFields の「leftView」プロパティに空白のビューを設定しています。これを削除すると、プレースホルダー テキストの領域で UITextFields に触れることができ、期待どおりに反応します。ただし、leftViewにはこのビューが必要です。このスペーサー ビューの背景色を赤にすると、まったく邪魔にならないことがわかるので、何が悪いのかわかりません。

このコードが原因でこの問題が発生するのはなぜですか?

ありがとう。

+(UIView*)getTextFieldLeftSpacerViewWithBackgroundColor:(UIColor*)backgroundColor andHeight:(CGFloat)height
{
    UIView *leftWrapper = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 8.0f, height)];
    leftWrapper.autoresizingMask = UIViewAutoresizingNone;
    [leftWrapper setOpaque:YES];
    if(backgroundColor){leftWrapper.backgroundColor = backgroundColor;}
    else{leftWrapper.backgroundColor = [UIColor clearColor];}
    return [leftWrapper autorelease];
}

+(void)setTextFieldLeftSpacerForTextFieled:(UITextField*)textField
{
    if(textField)
    {
        UIView *spacer = [MYViewController getTextFieldLeftSpacerViewWithBackgroundColor:nil andHeight:textField.bounds.size.height];
        textField.leftView = spacer;
        textField.leftViewMode = UITextFieldViewModeAlways;
    }
}
4

2 に答える 2

7

同じ問題に遭遇し、サブクラス化したくなかったので、使用する必要がありました:

leftWrapper.userInteractionEnabled = NO;
于 2013-01-03T15:31:57.990 に答える
1

私はこのアプローチを放棄しました。非表示のビューを使用してテキストをオフセットする代わりに、UITextField をサブクラス化し、UITextField 内のテキストの境界にオフセット CGRect を提供することにしました。次の SO 投稿は非常に役に立ちました。

UITextField のテキストをインデントする

于 2012-06-07T20:27:08.537 に答える