我正在开发一个iOS应用程序,我将UITextField子类化,以便设置占位符文本的颜色。我也将它水平居中,但我的问题是我的占位符文本没有垂直居中,并且由于某种原因,光标不在占位符文本中居中,而是出现在占位符文本的第一个字符之后。 / p>
我的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子类化,现在只是为了解决更多问题。啧。
有没有办法让我现在可以垂直居中占位符文本,同时让光标居中?更好的是,有没有办法让我将占位符文本的灰色更改为白色而不必将其子类化?这将是理想的。
感谢所有回复的人。
答案 0 :(得分:4)
我认为您忘记在.h中实现(不在您的自定义TextField类中)
@interface YourView : UIView<UITextFieldDelegate>
并且没有调用委托方法!如果你这样做,占位符textcolor必须是你想要的颜色。
#import "YourView.h"
@implementation YourView
// .....
_field.delegate = self;
_field.textAlignment = NSTextAlignmentCenter;
// ....
你可以像这样添加一些垂直填充:
UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 30)];
_field.leftView = paddingView;
_field.leftViewMode = UITextFieldViewModeAlways;
来自apple developer库:
leftView 叠加视图显示在文本的左侧 字段。
@property(非原子,保留)UIView * leftView
讨论你可以使用 左侧叠加视图指示文本的预期行为 领域。例如,您可能会在其中显示放大镜 位置以指示文本字段是搜索字段。
左侧叠加视图放置在由。返回的矩形中 leftViewRectForBounds:接收者的方法。图像相关联 使用此属性应该适合给定的矩形。如果不合适, 它被缩放以适应。
如果您的叠加视图不与任何其他同级视图重叠,则为它 像任何其他视图一样接收触摸事件。如果指定控件 对于您的视图,控件跟踪并像往常一样发送操作。如果 覆盖视图与清除按钮重叠,但是,清除按钮 始终优先接收事件。
link to apple developer library / UITextField
我希望这有帮助!