【问题标题】:Need to center placeholder text in custom UITextField vertically in iOS需要在 iOS 中垂直居中自定义 UITextField 中的占位符文本
【发布时间】:2013-09-13 11:21:36
【问题描述】:

我正在开发一个 iOS 应用程序,我将 UITextField 子类化以设置占位符文本的颜色。我也将它水平居中,但我的问题是我的占位符文本没有垂直居中,并且由于某种原因,光标不在占位符文本中居中,而是出现在占位符文本的第一个字符之后。

为了设置占位符文本的颜色并将文本水平居中覆盖,我在 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 子类化,只是为了解决更多问题。

现在有没有一种方法可以让占位符文本垂直居中,并且光标也居中?更好的是,有没有办法让我将占位符文本的灰色更改为白色而不必对其进行子类化?这将是理想的。

【问题讨论】:

    标签: ios uitextfield


    【解决方案1】:

    我认为您忘记在 .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;
    

    来自苹果开发者库:

    左视图 显示在文本左侧的叠加视图 字段。

    @property(nonatomic, retain) UIView *leftView

    讨论你可以使用 左侧覆盖视图以指示文本的预期行为 场地。例如,您可以在此显示放大镜 位置以指示文本字段是搜索字段。

    左叠加视图放置在返回的矩形中 leftViewRectForBounds:接收方的方法。关联的图像 这个属性应该适合给定的矩形。如果不合适, 它被缩放以适应。

    如果您的叠加视图不与任何其他同级视图重叠,它 像任何其他视图一样接收触摸事件。如果您指定一个控件 在您看来,控件像往常一样跟踪和发送操作。如果 覆盖视图与清除按钮重叠,但是,清除按钮 总是优先接收事件。

    link to apple developer library / UITextField

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 2023-04-03
      • 2012-07-17
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2015-12-26
      • 2017-08-04
      相关资源
      最近更新 更多