2

プレースホルダー テキストの色を設定するために UITextField をサブクラス化した iOS アプリケーションで作業しています。水平方向にも中央に配置しましたが、問題はプレースホルダー テキストが垂直方向に中央に配置されず、何らかの理由でカーソルがプレースホルダー テキスト内の中央に配置されず、代わりにプレースホルダー テキストの最初の文字の直後に表示されることです。

プレースホルダー テキストの色を設定し、テキストを水平方向に中央揃えにするためにオーバーライドする UITextField のサブクラスのメソッドは次のようになります。

- (void)drawPlaceholderInRect:(CGRect)rect {
    // Set colour and font size of placeholder text
    [[UIColor whiteColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:28] lineBreakMode:UILineBreakModeMiddleTruncation alignment:NSTextAlignmentCenter];

}

UITextField を作成して設定するコードは次のとおりです。

_field = [[CustomTextField alloc] initWithFrame:CGRectMake(190, 300, 644, 64)];
_field.delegate = (id)self;
[_field becomeFirstResponder];
[_field setBackgroundColor:[UIColor darkGrayColor]];
[_field setTextColor:[UIColor whiteColor]];
[_field setPlaceholder:@"Enter First and Last Name"];
[[_field layer] setMasksToBounds:8.0f];
[[_field layer] setBorderColor:[[UIColor grayColor] CGColor]];
[[_field layer] setBorderWidth:1.0f];
[_field setFont:[UIFont fontWithName:@"Arial" size:25]];
[_field setReturnKeyType:UIReturnKeyDone];
[_field setTextAlignment:NSTextAlignmentCenter];
_field.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
[self.view addSubview:_field];

最初に UITextField をサブクラス化したのは、すべて問題ないように見えたのに、何らかの理由でプレースホルダー テキストが白ではなく灰色だった (テキスト フィールドのテキストの色として設定した) ためです。皮肉なことに、プレースホルダー テキストは垂直方向と水平方向の両方で中央に配置され、カーソルも中央に配置されていました。そのため、プレースホルダーのテキストの色を修正するために、UITextField をサブクラス化しましたが、さらに多くの問題が発生しました。

プレースホルダーのテキストを垂直方向に中央に配置し、カーソルを中央に配置する方法はありますか? さらに良いことに、サブクラス化せずにプレースホルダー テキストの灰色を白に変更する方法はありますか? これは理想的です。

4

1 に答える 1